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 |