반응형
Casting
up casting : 자식 값을 부모 타입으로 형변환
down casting : up casting된 객체를 자식 타입으로 형변환
* 부모 값을 자식 타입으로 형변환 시 오류
Casting을 사용하는 이유
모든 자식 값을 전달받기 위해서는 동일한 타입의 저장공간으로 받아야 한다.
하지만 자식끼리는 서로 타입이 다르기 때문에 한 번에 전달 받을 수가 없다,
이 때 up casting을 사용하면, 모든 자식이 부모 타입이므로 하나의 저장공간에
모든 자식을 받을 수 있게 된다.
만약 up casting으로 자식 값을 전달 받았다면, 자식에서 새롭게 구현한 기능들은
사용할 수 없기 때문에 down casting을 통해서 복구하여 사용한다.
객체 간 타입 비교
→ instanceof
객체 instanceof 클래스 타입 : 조건식, 참 또는 거짓 중 하나가 나오는 식
- 객체가 클래스타입이면 true
- 객체가 클래스타입이 아니면 false
package Casting;
class Car{
public void engineStart(){
System.out.println("열쇠로 시동 킴");
}
}
class SuperCar extends Car{
@Override
public void engineStart() {
System.out.println("음성으로 시동 킴");
}
public void openRoof(){
System.out.println("지붕 열림");
}
}
public class CastingTest {
public static void main(String[] args) {
Car matiz = new Car();
SuperCar ferrari = new SuperCar();
// up casting
Car noOptionFerrari = new SuperCar();
// 자식에서 재정의된 값은 들어가지만
// noOptionFerrari.engineStart();
// 자식에서 추가로 만든 필드는 사용할 수 없다.
// noOptionFerrari.openRoof();
// 자식에 부모 값을 담을 수 없다.
// SuperCar brokenFerrari = (SuperCar) new Car();
// down casting
SuperCar fullOptionFerrari = (SuperCar) noOptionFerrari;
// fullOptionFerrari.openRoof();
System.out.println(matiz instanceof Car); // true
System.out.println(matiz instanceof SuperCar); // false
System.out.println(ferrari instanceof Car); // true
System.out.println(ferrari instanceof SuperCar); // true
System.out.println(noOptionFerrari instanceof Car); // true
System.out.println(noOptionFerrari instanceof SuperCar); // true
System.out.println(fullOptionFerrari instanceof Car); // true
System.out.println(fullOptionFerrari instanceof SuperCar); // true
}
}
반응형
'JAVA' 카테고리의 다른 글
시큐리티(미완성) (0) | 2023.08.08 |
---|---|
JAVA Object 클래스 란? (0) | 2023.04.27 |
JAVA 변수의 종류 (0) | 2023.04.23 |
JAVA 클래스란? (0) | 2023.04.22 |
JAVA 메소드란? (0) | 2023.04.18 |