1, 자식을 부모의 참조자료형에 저장하면 자동으로 형변환이 일어남.
2, 부모 타입을 자식타입으로 변경하는 경우 아래의 코드와 같이 명시적 형변환을 시켜야한다.
3, instanceof 연산자를 사용할 때는 최하위 자식 -> 부모 순으로 필터링 한다.
public class TestApplication { public static void main(String [] args) { /* * B b = new B(); * * b.printname(); */ objectCastArray(); } public static void objectCastArray() { A [] objectArray = new A[3]; objectArray[0]= new A(); objectArray[1]= new B(); objectArray[2]= new B(); printIfBClass(objectArray); } public static void printIfBClass(A [] objectArray) { for ( A a : objectArray) { if ( a instanceof B) { // instanceof 를 써서 type 체크할 경우, 가장 하위에 있는 자식 타입부터 확인 //if ( a instanceof A) { 옆에 있는 녀석 처럼 체크하면 a가 A인지 B인지 알 수 없음. B또한 A타입이기 때문. B b = (B)a; //명시적 형변환 b.printname(); } } } static class A{ private void printname() { System.out.println("AA"); } } static class B extends A{ B(){ super(); } public void printname() { System.out.println("BB"); } } }
출처 : 자바의 신
'java' 카테고리의 다른 글
다형성 주의 사항 ( 부모자식의 접근제어자가 다를 때 발생하는 상황) (0) | 2019.09.13 |
---|---|
오버라이딩 (0) | 2019.09.13 |
상속에서 생성자 관련 팁. (0) | 2019.09.13 |
import 명령어 관련 팁 (0) | 2019.09.13 |
임의 개수 매개 변수, Arbitrary Number of Arguments (0) | 2019.09.12 |