본문 바로가기

develop/Java

instanceof 연산자,동적바인딩

 

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