-------------------------------------------------
//Grandfather.java
class Grandfather {
String name = "할아버지";
}
--------------------------------------------------
//Father.java
class Father extends Grandfather {
String name = "아버지";
}//class
-----------------------------------------------------
//Son.java
class Son extends Father {
String name = "아들";
} //class
------------------------------------------------------
//TypeCastingTest.java
class TypeCastingTest {
public static void main(String[] args) {
Son s1 = new Son(); // ok
Father f1 = new Father(); // ok
Grandfather g1 = new Grandfather(); // ok
System.out.println(s1.name); //아들
System.out.println(f1.name); //아버지
System.out.println(g1.name); //할아버지
//상위형변환(upcasting)
Father f2 = new Son(); //ok
Grandfather g2 = new Son(); //ok
Grandfather g3 = new Father(); //ok
System.out.println(f2.name); //아버지
System.out.println(g2.name); //할아버지
System.out.println(g3.name); //할아버지
//하위형변환(downcasting)
//Son s2 = new Father(); // x
//Exception in thread "main" java.lang.ClassCastException: Father cannot be cast to Son
//at TypeCastingTest.main(TypeCastingTest.java:28)
//Son s2 = (Son)new Father(); //명시적 타입 변환
//Father f3 = (Father)new Grandfather();
// heap / GF / F / S / 메모리 참조 범위가 하위 타입이 넓다.
// 하->상 형변환 한것만.
//System.out.println(s2.name);
//System.out.println(f3.name);
//하위 형변환
//하위타입 객체참조변수에 상위타입 객체 참조값을 저장할때는
//명시적으로 형변환을 해야한다.
//단, 한번은 하위타입에서 상위타입으로 형변환되었던 것만
//하위형변환 가능하다.
Son s5 = new Son();
Father f5 = s5;
Son s6 = (Son)f5;
System.out.println(s5.name);
System.out.println(f5.name);
}//main
}//class
//Grandfather.java
class Grandfather {
String name = "할아버지";
}
--------------------------------------------------
//Father.java
class Father extends Grandfather {
String name = "아버지";
}//class
-----------------------------------------------------
//Son.java
class Son extends Father {
String name = "아들";
} //class
------------------------------------------------------
//TypeCastingTest.java
class TypeCastingTest {
public static void main(String[] args) {
Son s1 = new Son(); // ok
Father f1 = new Father(); // ok
Grandfather g1 = new Grandfather(); // ok
System.out.println(s1.name); //아들
System.out.println(f1.name); //아버지
System.out.println(g1.name); //할아버지
//상위형변환(upcasting)
Father f2 = new Son(); //ok
Grandfather g2 = new Son(); //ok
Grandfather g3 = new Father(); //ok
System.out.println(f2.name); //아버지
System.out.println(g2.name); //할아버지
System.out.println(g3.name); //할아버지
//하위형변환(downcasting)
//Son s2 = new Father(); // x
//Exception in thread "main" java.lang.ClassCastException: Father cannot be cast to Son
//at TypeCastingTest.main(TypeCastingTest.java:28)
//Son s2 = (Son)new Father(); //명시적 타입 변환
//Father f3 = (Father)new Grandfather();
// heap / GF / F / S / 메모리 참조 범위가 하위 타입이 넓다.
// 하->상 형변환 한것만.
//System.out.println(s2.name);
//System.out.println(f3.name);
//하위 형변환
//하위타입 객체참조변수에 상위타입 객체 참조값을 저장할때는
//명시적으로 형변환을 해야한다.
//단, 한번은 하위타입에서 상위타입으로 형변환되었던 것만
//하위형변환 가능하다.
Son s5 = new Son();
Father f5 = s5;
Son s6 = (Son)f5;
System.out.println(s5.name);
System.out.println(f5.name);
}//main
}//class
'JAVA' 카테고리의 다른 글
Scanner를 이용한 입력, StringTokenizer를 이용한 분리 (0) | 2009.11.21 |
---|---|
scanner example (0) | 2009.11.21 |
자바 중간고사 정리 (0) | 2009.11.21 |
Java Serialization 직렬화 예제 (0) | 2009.11.06 |
자바의 기본 타입 (0) | 2009.11.06 |