instanceof 연산자
클래스의 관계
1. Has - A 관계 (포함 관계)
=> A has a B = A 가 B를 가지고 있다 = B가 A에 포함되어 있다.
=> 일반적인 클래스의 관계이며, 특정 클래스 내에 다른 클래스를 포함시켜 사용하는 관계
2. Is - A 관계 (상속 관계)
=> A is a B = A는 B이다 = A는 B를 상속받은 관계이다.
=> class A extends B{}
앞에서 레퍼런스 형변환을 할 때 기준은 부모-자식간 상속관계여야 형변환이 일어난다.
그걸 판별하기 위한 연산자로 instanceof 연산자를 사용한다.
==> 좌변의 객체가 우변의 클래스타입과 상속관계인지 판별하는 연산자이며
if문에 결합하여 판별하는데 사용되며 판별 결과가 true면 형변환이 가능한 관계다
false면 절대로 형변환이 불가능하다.
if( A instanceof B) {}
=> A는 참조변수(인스턴스), B는 클래스명
동적바인딩
상속 관계에서 업캐스팅 후 상속된 메서드를 호출하여 실행할 때
컴파일 시점에서의 실행 대상과 실제 실행 단계에서의 실행 대상이 달라지는 것(동적으로 변하는 것)
참조 변수의 데이터타입과 무관하게 실제 인스턴스에 따라 실행되는 메서드가 달라짐
Parent p = new Parent();
p.parentPrn();
p = new Child();//업캐스팅
//참조변수 p는 parent 클래스 타입의 변수지만
//저장된 인스턴스 주소는 child 클래스 타입의 인스턴스다.
//따라서, 참조변수 p를 통해 접근하는 실제 인스턴스는 child 이므로
//p.parentPrn 메서드를 호출하면 실행되는 메서드도 child 메서드다
'develop > Java' 카테고리의 다른 글
객체지향 추상화 (0) | 2021.03.11 |
---|---|
final 키워드, 상수 (0) | 2021.03.11 |
레퍼런스 형변환 (0) | 2021.03.08 |
생성자 super (0) | 2021.03.06 |
메서드 오버라이딩(Method Overriding) (0) | 2021.03.03 |