package ex0723;
public class Ex04_ClassTypeCast {
public static void main(String[] args) {
Test4 t1 = new Test4();
Sample4 s1 = new Sample4();
System.out.println(t1.b+", "+s1.b);
t1.print(); // Test4의 print() 호출
// up-casting
Test4 t2 = new Sample4();
Test4 t3 = s1;
Object o = new Sample4();
System.out.println(t2.b); // 20, 필드는 무조건 자기 것
// System.out.println(t3.c); 컴파일 오류. Test4클래스에 c 필드가 없으므로
System.out.println( ((Sample4)t3).c ); // 200, 다운캐스팅
// System.out.println (Sample4)t3.c ); // 컴오류. 연산자 우선순위가 . 이 높음.
System.out.println( ((Sample4)o).c ); // 200, 다운캐스팅
t2.print(); // 메소드는 재정의된 하위 클래스 메소드 호출(상위 메소드는 숨는다.)
//t2.write(); // 컴파일오류. Test4에 없는 메소드 이므로.
((Sample4)t2).write(); // 다운 캐스팅
// down-casting
// Sample4 s2 = (Sample4) t1; 런타임오류(ClassCastException) up한 것만 down가능
if(t1 instanceof Sample4) { // instanceof 연산자 : 객체가 해당 클래스의 객체인지를 확인
Sample4 s2 = (Sample4) t1;
System.out.println(s2);
} else {
System.out.println("Sample4 객체가 아님...");
}
// Sample4 s2 = t2; // 컴파일 오류. down은 반드시 강제 캐스팅이 필요.
Sample4 s2 = (Sample4)t2;
Sample4 s3 = (Sample4)t3;
System.out.println(s2.c+","+s3.c); // 200, 200
Test4 t4 = (Test4)o;
System.out.println(t4.a+","+t4.b); // 10, 20 필드는 무조건 자기것이 우선순위가 높다.
Sample4 s4 = (Sample4)o;
System.out.println(s4.a+","+s4.b+","+s4.c); // 10, 100, 200
}
}
class Test4 {
int a = 10;
int b = 20;
public void print() {
System.out.println(a+":"+b);
}
public void disp() {
System.out.println("disp...");
}
}
class Sample4 extends Test4 {
int b = 100;
int c = 200;
// 재정의
public void print() {
System.out.println(a+":"+super.b+":"+b+":"+c);
}
public void write() {
System.out.println("write...");
}
}
여기 자세히 봐야함. 보면서 그렇구나~ 하고 아는 것 같은데 했는데
막상 다른 문제 보면 틀림ㅠㅠ
'쌍용강북교육센터 > 7월' 카테고리의 다른 글
0726_Ex01_abstract : 추상 클래스 (0) | 2021.07.26 |
---|---|
0723_Ex05_ClassTypeCast : 클래스 타입 캐스트 (0) | 2021.07.23 |
0723_Ex03_ClassTypeCast : up-casting, down-casting (0) | 2021.07.23 |
0723_Ex02_override : 재정의 (0) | 2021.07.23 |
0723_Ex01_override (0) | 2021.07.23 |