🌱 오늘의 주제 : 참조변수의 형변환
🌱 참조변수의 형변환
- 상속관계에 있는 클래스 사이에서, 자손타입의 참조변수를 조상타입의 참조변수로, 조상타입의 참조변수를 자손타입의 참조변수로의 형변환이 가능하다.
- 참조변수의 형변환은 리모컨(참조변수)을 다른 종류의 것으로 바꾸는 것 뿐이다. 바꾸는 이유는 사용할 수 있는 멤버 개수를 조절하기 위한 것.
FireEngine f = new FireEngine();
Car c = (Car)f; // 조상인 Car타입으로 형변환 (생략 가능), f의 값(객체의 주소)을 c에 저장.
FireEngine f2 = (FireEngine)c; // 자손인 FireEngine타입으로 형변환 (생략 불가)
Ambulance a = (Ambulance)f; // 에러. 상속관계가 아닌 클래스 간의 형변환 불가
package inheritance;
public class Ex7_7 {
public static void main(String[] args) {
// 참조변수의 형변환
Car car = null;
FireEngine fe = new FireEngine(); // 실제 객체가 무엇인지 중요!! ( 객체 멤버수를 넘으면 안됨!!!)
FireEngine fe2 = null;
fe.water();
car = fe; // car = (Car)fe;에서 형변환이 생략됨
// car.water(); 컴파일 에러!! Car타입의 참조변수는 water()를 호출할 수 없다.
fe2 = (FireEngine)car; // 자손타입 <- 조상타입 . 형변환 생략 불가.
fe2.water();
}
}
class Car {
String color;
int door;
void drive() {
System.out.println("drive, Brrr~~ ");
}
void stop() {
System.out.println("stop!!");
}
}
class FireEngine extends Car {
void water() {
System.out.println("water!!!");
}
}
----------------
<run 결과>
water!!!
water!!!
- // car.water(); 컴파일 에러!! Car타입의 참조변수는 water()를 호출할 수 없다. 그 이유는, car 타입은 water( ) 를 가지고 있지 않다.
🌱 instanceof 연산자
- 참조변수가 참조하고 있는 객체의 실제 타입을 알아보기 위해 instanceof 연산자를 사용한다.
- 주로 조건문에 사용되고, instanceof 왼쪽에는 참조변수, 오른쪽에는 타입(클래스명)이 피연산자로 위치한다.
- true 이면, 형변환이 가능하다는 뜻이다.
void doWork(Car c) {
if (c instanceof FireEngine) { // 형변환이 가능한지 확인 // c가 가리키는 객체가 FireEngine 이냐?? // FireEngine의 자손이냐??
FireEngine fe = (FireEngine)c; // 형변환
fe. water ( );
'Java' 카테고리의 다른 글
Java - 인터페이스(interface) (0) | 2023.01.29 |
---|---|
Java - 추상 클래스(abstract class), 추상메서드(abstract method) (0) | 2023.01.29 |
Java - 다형성(polymorphism) (0) | 2023.01.28 |
Java - super( ), super, 오버라이딩 (0) | 2023.01.25 |
Java - 클래스 간의 관계 - 포함관계 (0) | 2023.01.25 |