- instanceof 연산자
- 어떤 객체에 대한 is-a 관계를 판별하는 연산자
- 주로 if문을 사용하여 형변환이 가능한 지 여부를 판별하는 용도로 사용
- 연산자 좌변에는 판별에 필요한 객체의 레퍼런스 변수를 지정하고
- 연산자 우변에는 is-a 관계 판별에 사용될 클래스명을 지정
- 좌변의 객체가 우변의 클래스 타입으로 형변환이 가능하지 여부 판별
- A is a B 에 대한 판별 문법 A instanceof B 형태로 사용
- (A : 객체의 레퍼런스 변수명, B : 클래스명
- instaceof 연산 결과가
- true 이면 형변환 가능 (업 or 다운캐스팅)
- false 이면 어떤방법으로든 형변환 불가
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
class Car {
int speed;
int maxSpeed;
public Car(int maxSpeed) {
this.maxSpeed = maxSpeed;
}
public void seedUP(int Speed) {
System.out.println("Car 속력 증가");
}
public void speedDown(int Speed) {
System.out.println("Car 속력 감소");
}
}
class Taxi extends Car {
public Taxi(int maxSpeed) {
super(maxSpeed); //명시적으로 슈퍼클래스의 생성자 호출
}
@Override
public void speedUp(int Speed) {
System.out.println("Taxi 속력 증가");
}
@Override
public void speedDown(int Speed) {
System.out.println("Taxi 속력 감소");
}
public void lift() {
System.out.println("손님 승차");
}
public void drop() {
System.out.println("손님 하차");
}
}
|
cs |
클래스들로 instanceof를 사용해 캐스팅
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
public class Code {
public static void main(String[] args) {
Taxi taxi = new Taxi(100);
Car car = null;
if(taxi instanceof Car) {
car = taxi;
// 업캐스팅 이후엔 공통 메서드만 호출 가능
car.speedUP(100);
car.speedDown(50);
}
//car > Taxi 다운캐스팅
if(car instanceof Taxi) {
Taxi taxi2 = (Taxi)car;
// 다운캐스팅 후 호출가능한 메서드 4개
taxi2.speedUp(200);
taxi2.speedDown(120);
taxi2.lift();
taxi2.drop();
}
}
}
|
cs |
'Language > Java' 카테고리의 다른 글
final 키워드 (0) | 2020.06.11 |
---|---|
추상메서드(abstract method) (0) | 2020.06.11 |
캐스팅 (0) | 2020.06.09 |
레퍼런스(참조형) 형변환 (0) | 2020.06.05 |
생성자 super() (0) | 2020.06.05 |