AAA a1 = new BBB(); // 우리는 이렇게 쓸일이 거의 없다. 쓸 수는 있다고!
a1.testA(); // 출력 : A의 매서드
BBB b1 = (BBB)a1;
// 원래는 BBB b = a; 이거안되는데, 강제로 type casting해준거임
// (부모의 참조변수를 가져올때는 댓가가 필요하다구.)
// BBB b1 = new BBB(); -->
b1.testB(); // 출력 : B의 매서드
b1.testA(); // 출력 : A의 매서드
// BBB b1 = new BBB();와 BBB b2 = (BBB) a;의 경우
// 모두 BBB 클래스의 객체를 가리키는 것이므로 BBB 클래스의 모든 메서드와 속성을 호출할 수 있다!
// --> BBB객체를 a1으로 받아서 다시 b1에 넘겨주는게 그냥 BBB b1 = new BBB();와 같다는 뜻임.
// ### 이 페이지는 타입캐스팅을 알려주려고 만든페이지임!
// BBB b1 = new BBB();
// b1.testB(); // BBB 클래스의 testB() 메서드 호출
// b1.testA(); // AAA 클래스의 testA() 메서드 호출
//
// BBB b2 = (BBB) a;
// b2.testB(); // BBB 클래스의 testB() 메서드 호출
// b2.testA(); // AAA 클래스의 testA() 메서드 호출
// BBB b1 = (BBB)a1; : a1 변수를 BBB 클래스의 참조 변수 b1에 할당하기 전에 명시적인 타입 캐스팅을 수행
// ---> 이것은 a1 변수가 BBB 클래스의 객체를 가리키고 있음을 알고 있기 때문에 가능한거임!!!
// ---> 이 작업을 통해 b1 변수는 BBB 클래스의 참조가 되며, BBB 클래스의 멤버를 사용할 수 있다.
if(a1 instanceof BBB) { // 변수 a1이 BBB 클래스의 인스턴스인지 여부를 확인
// --> 즉, a1이 BBB 클래스 또는 BBB 클래스의 하위 클래스의 객체를 가리키는지 확인하는것
b1 = (BBB)a1;
b1.testB();
}else {
System.out.println("a1은 BBB가 아니다");
}
// --> 런타임에 객체의 '실제 타입을 확인'하고 해당 타입으로 안전하게 캐스팅하여 메서드를 호출하는 방법임 (잘 사용 X)
'JAVA > DAY 15 _ 23.09.06' 카테고리의 다른 글
상속_array활용 (0) | 2023.09.12 |
---|---|
Object class (0) | 2023.09.12 |
Polymorphism (1) | 2023.09.12 |
Basic (0) | 2023.09.12 |
Final (0) | 2023.09.12 |