[기본 개념] 2 | (5.2) instance of 연산자, 참조변수와 인스턴스 연결
1 다형성이란?
2 참조변수의 형변환
3> instanceof연산자
4> 참조변수와 인스턴스의 연결
5 매개변수의 다형성
6 여러 종류의 객체를 배열로 다루기
3. instanceof연산자
참조변수가 참조하고 있는 인스턴스의 실제 타입을 알아보기 위해 instanceof연산자를 사용한다. 주로 조건문에 사용되며, instanceof의 왼쪽에는 참조변수를 오른쪽에는 타입(클래스명)이 피연산자로 위치한다. 그리고 연산의 결과로 boolean값인 true와 false중의 하나를 반환한다.
void doWork(Car c) {
if (c instanceof FireEngine) {
FireEngine fe = (FireEngine) c ;
fe.water( ) ;
· · ·
} else if (c instanceof Ambulance) {
Ambulance a = (Ambulance) c ;
a.siren( );
· · ·
}
}
실제 인스턴스와 같은 타입의 instanceof연산 이외에 조상타입의 instanceof연산에도 true를 결과로 얻으며, instanceof연산의 결과가 true라는 것은 검사한 타입으로 형변환을 해도 아무런 문제가 없다는 뜻이다.
4. 참조변수와 인스턴스의 연결
멤버변수가 조상 클래스와 자손 클래스에 중복으로 정의된 경우, 조상타입의 참조변수를 사용했을 때는 조상 클래스에 선언된 멤버변수가 사용되고, 자손타입의 참조변수를 사용했을 때는 자손 클래스에 선언된 멤버변수가 사용된다.
예제/BindingTest.java
public class BindingTest {
public static void main(String[] args) {
Parent p = new Child();
Child c = new Child();
System.out.println("p.x = " + p.x);
p.method();
System.out.println("c.x = " + c.x);
c.method();
}
}
class Parent {
int x = 100;
void method() {
System.out.println("Parent Method");
}
}
class Child extends Parent {
int x = 200;
void method() {
System.out.println("Child Method");
}
}
실행결과
p.x = 100
Child Method
c.x = 200
Child Method
타입은 다르지만, 참조변수 p와 c 모두 Child인스턴스를 참조하고 있다. 그리고 Parent클래스와 Child클래스는 서로 같은 멤버들을 정의하고 있다.
메서드인 method( )의 경우 참조변수의 타입에 관계없이 항상 실제 인스턴스의 타입인 Child클래스레 정의된 메서드가 호출되지만, 인스턴스변수인 x는 참조변수의 타입에 따라서 달라진다.
출처 | Java의 정석 (남궁 성)
'💠프로그래밍 언어 > Java' 카테고리의 다른 글
[기본 개념] 2 | (6.1) 추상클래스 (0) | 2021.11.19 |
---|---|
[기본 개념] 2 | (5.3) 매개변수의 다형성, 객체를 배열로 (0) | 2021.11.19 |
[기본 개념] 2 | (5.1) 다형성, 참조변수의 형변환 (0) | 2021.11.19 |
[기본 개념] 2 | (4.1) static, final, abstract, 접근 제어자 (0) | 2021.11.19 |
[기본 개념] 2 | (3.1) Package, Import 문 (0) | 2021.11.18 |