📚 다형성 (polymorphism)
poly (여러개) + morphism (형태) : 하나의 객체가 여러 가지 형태를 가질 수 있는 성질
다형성 : 상위 클래스 타입의 참조 변수를 통해 하위 클래스의 객체를 참조
예시)
class TV {
void power() {}
void volume() {}
void channel() {}
}
class SmartTV extends TV {
void AI() {}
void shopping() {}
}
일반적으로는 아래와 같이 동일한 클래스 타입의 참조 변수 생성 및 초기화!
TV tv_remotecontrol = new TV();
SmartTV smart_remotecontrol = new SmartTV();
BUT, 상속 관계라면 부모 타입 참조 변수로 자식 클래스 타입의 참조 변수를 받아 초기화!
TV tv_remoteControl = new SmartTV();
** 반대로, 부모클래스 참조변수는 자식클래스 참조변수를 받을 수 없다
이때,
참조 변수가 사용할 수 있는 멤버의 수 = 부모 클래스의 멤버의 수
(기본 티비 기능으로 스마트 티비가 완벽 호환되지 않아 사용 가능 기능이 줄어든다.)
📚 참조 변수의 타입 변환 (= 캐스팅)
참조 변수(객체, 주소값) 의 타입 변환으로, 사용할 수 있는 멤버의 개수를 조절한다!
📌 세 가지 조건
예시)
class Vehicle { // 부모 클래스
void startEngine() {}
void accelerate() {}
void brake() {}
}
class Car extends Vehicle { // 자식 Car 클래스
void giveRide() {}
}
class MotorBike extends Vehicle { // 자식 MotorBike 클래스
void performance() {}
}
// 1. Car 클래스 타입의 참조변수 car 생성
Car car = new Car();
// 2. 참조변수 car 의 타입을 상위클래스 Vehicle 으로 변환 (업캐스팅)
Vehicle vehicle = (Vehicle) car;
// 3. 참조변수 vehicle 의 타입을 하위클래스 Car 으로 변환 (다운캐스팅)
Car car2 = (Car) vehicle;
// 4. 참조변수 car 의 타입을 MotorBike 클래스 타입으로 변환 (오류 : 상속관계 아님)
MotorBike motorBike = (MotorBike) car;
📚 instanceof 연산자
참조 변수의 타입 변환 (캐스팅)이 가능한지 여부를 boolean 타입으로 확인
📌 기본 양식
참조변수 instanceof 타입
return 이 true 면 가능, false 면 불가능null 이면 false 를 반환예시 )
class Hardware {}
class Mouse extends Hardware {}
class Keyboard extends Hardware {}
1. '하드웨어' 클래스 타입의 참조변수 '하드웨어' (일반적)
Hardware hardware = new Hardware();
hardware instanceof Object // true
hardware instanceof Hardware // true
hardware instanceof Mouse // false
2. '하드웨어' 클래스 타입의 참조변수 '키보드' (업캐스팅)
Hardware keyboard = new Keyboard();
keyboard instanceof Object // true
keyboard instanceof Hardware // true
keyboard instanceof Keyboard // true
keyboard instanceof Mouse // false : 상속관계X