1번
---------------------------------------------------------------------------------------
class animal{
void food(){System.out.println("뭔가를 먹는다");}
}
class bird extends animal{
public void sound(String data){System.out.println(data);}
}
public class practice {
public static void main(String[] args){
animal a = new bird();
a.sound("haha"); // 오류!!
((bird)a).sound("haha"); // 형변환 후 정상작동
}
}
2번
----------------------------------------------------------------------------------------
class Shape{
public void draw(){System.out.println("shape draw");}
}
class Rectangle extends Shape{
public void draw(){System.out.println("rectangle draw");}
}
public class practice {
public static void main(String[] args){
Shape s =new Rectangle();
s.draw(); // 왜 이녀석은 ((Rectangle)s).draw() 로 형변환 하지 않아도 실행되는거죠?
}
}
----------------------------------------------------------------------------------------
조상타입의 참조변수로 자식타입의 인스턴스를 참조하도록 할시, 조상타입의 참조변수로는 자식의 멤버변수를 모두 사용할 수 없다고 알고 있었습니다.
그런데 2번의 예에서는 형변환을 하지 않아도 왜 정상적으로 작동이 되는 것이죠??