import java.util.*;
import java.io.*;
class 수업내용 {
public static void main(String [] a) {
String str = "Hello World";
boolean b = str.equals( "Hello World");
System.out.println( b );
int len = str.length( );
System.out.println( len );
char c = str.charAt(0);
System.out.println( c );
for( int i = 0 ; i < str.length( ) ; i++) {
System.out.print( str.charAt( i ) );
}
System.out.println( );
}
}
/*
package multi.it1401.sbc;
class Pack
{
String name;
String getName( ) {
return name;
}
void setName(String name) {
this.name = name;
}
}
변수이름 : classpath
변수값 : .;c:\packtest
import multi.it1401.sbc.Pack;
class 수업내용 {
public static void main(String [] a) {
Pack p = new Pack( );
p.name = "sbc";
p.setName("손병찬");
String name = p.getName ( );
System.out.println(name);
}
}
*/
/*
인터페이스
1. 완벽한 추상화이다.
2. 객체 생성이 불가능하다.
3. 인터페이스를 상속하는 하위 클래스를 이용하여 객체를 얻어옴
4. 하위 클래스는 인터페이스에 선언된 모든 메소드를 재정의함
5. 인터페이스에는 추상 메소드만 선언할 수 있다.
선언되는 메서드는 자동으로 public abstract 가 자동 생성됨
6. 인터페이스에 선언되는 모든 변수는 상수로 쓰인다.
선언되는 모든 변수는 자동으로 public static final이 생성됨
7. 인터페이스는 다중상속의 개념을 지원한다.
클래스 extends 클래스
인터페이스 extends 인터페이스
클래스 implements 인터페이스
*/
/*
interface Inter1 {
int m = 100;
public void print( String str ) ;
}
interface Inter2 extends Inter1{
int m = 100;
public void print( ) ;
}
interface Inter3 extends Inter2{
int m = 100;
public void print( int i ) ;
}
interface Inter4 extends Inter2{
int m = 100;
void print(int i, String name);
}
class Inter_Sub implements Inter4 {
public void print(int i, String name) {
System.out.println( name + " " + i );
}
public void print( String str ) {
System.out.println( str );
}
public void print( int i ) {
System.out.println( i );
}
public void print( ) {
System.out.println( "없음" );
}
}
class 수업내용 {
public static void main(String [] a) {
Inter1 i = new Inter_Sub( );
i.print("오!!! 제발...");
System.out.println( i.m );
System.out.println( Inter1.m );
}
}
*/
/*
abstract (추상)
1. 객체 생성이 불가능
2. 추상메소드를 가질 수 있다
3. 추상메소드의 형태는 메소드의 선언만 있고 구현부는 없다.
4. 추상클래스를 상속하는 하위 클래스는 반드시 추상클래스의
추상메소드를 구현(오버라이딩) 하여야 한다.
5. 추상클래스의 객체는 하위 클래스를 이용하여 얻어온다.
*/
/*
abstract class AbstractTest{
int i = 100;
int k = 200;
abstract public void print(int i, String name) ;
public void print(String name) {
System.out.println( "상위 : print(String name)" );
}
public void print(int i) {
System.out.println( "상위 : print(int i)" );
}
}
class AbstractSub extends AbstractTest {
int k = 400;
int m = 500;
public void print(int i, String name) {
System.out.println( "하위 : print(int i, String name)" );
}
public void print(String name) {
System.out.println( "하위 : print(String name)" );
}
public void print( ) {
System.out.println( "하위 : print( )" );
}
}
class 수업내용 {
public static void main(String [] a) {
AbstractTest at = new AbstractSub( );
at.print(100, "오!!!");
System.out.println( at.i );
System.out.println( at.k );
// System.out.println( at.m ); //==========
// at.print( ); //==========
at.print( "제발..." );
at.print( 100 );
}
}
*/
/*
=====================================
객체의 형변환
1. 조건 : 상속관계
2. 종류
- 묵시적 형변환 : 상위 클래스 = 하위 클래스
AbstractTest at = new AbstractSub( );
- at가 접근할 수 있는 범위
자신 타입의 클래스 내의 멤버변수와 메소드만을 사용할 수 있다
단, 하위 클래스에서 오버라이딩된 메소드가 있다면 자신의 것이
아니라 하위 클래스의 메소드를 사용한다.
- 명시적 형변환 : 하위 클래스 = ( 하위 객체 )상위 클래스
AbstractTest at = new AbstractSub( );
AbstractSub at = (AbstractSub)at;
AbstractTest at = new AbstractTest( );
AbstractSub at = (AbstractSub)at;
*/