부모타입으로 자식객체를 참조하면 부모가 가지고 있는 메소드만 사용할 수 있다. 자식객체가 가지고 있는 메소드나 속성을 사용하고 싶다면 형변환 해야 한다.
부모클래스와 자식클래스 정의
public class Car{
public void run(){
System.out.println("Car의 run 메소드");
}
}
public class Bus extends Car{
public void ppangppang(){
System.out.println("빵빵");
}
}
상속관계란 'is a' 관계이다. "Bus는 Car이다"라는 관계가 성립된다.
부모타입으로 자식 객체 참조(묵시적 형변환)
public class BusExam{
public static void main(String[] args){
Car car = new Bus();
car.run();
car.ppangppang(); // 컴파일 오류 발생
}
}
클래스 형변환 - 자식 클래스의 메소드 호출
public class BusExam{
public static void main(String[] args){
Car car = new Bus();
car.run();
car.ppangppang(); // 컴파일 오류 발생
Bus bus = (Bus)car; // 부모타입을 자식타입으로 형변환
bus.run();
bus.ppangppang(); // 호출 가능
}
}
자식 클래스의 메소드를 호출하고 싶다면, 자식 타입의 참조변수로 참조해야 한다.