다형성을 구현하는 데 3가지 특징
상속 + 메서드 오버라이딩 + 클래스 타입 변환
자식타입 클래스 ==>> 부모타입 클래스 (자동타입변환)
자식타입 클래스 <<== 부모타입 클래스 (강제타입변환)
class Car{}
class Bus extends Car {}
class SchoolBus extends Bus {}
class OpenCar extends Car {}
class SportsCar extends OpenCar {}
main () {
Car c1 = new SchoolBus(); //
Bus b1 =new Bus();//자동타입변환
Bus b2 = new SchoolBus();//자동타입변환
Car c2 = new OpenCar();//자동타입변환
OpenCar oc = new SportsCar();//자동타입변환
}
강제 형 변환
Bike {
void info(){}
void ride(){}
}
FourWheelBike extends Bike {
@Override
void info(){
super.info();
}
void addWheel(){}
}
main() {
Bike b = new FourWheelBike("윤기");
b.info();
b.ride();
//b.addWheel(); <- 부모타입으로는 호출 불가
FourWheelBike fwb = (FourWheelBike) b; //강제타입변환
fwb.addwheel(); //자식메서드 사용 가능
}