JAVA이야기
JAVA - polymorphism
НooпeУ
2010. 7. 29. 13:32
public class Taxi extends Car{
public Taxi(){
System.out.println("TAXI");
}
public int i = 100;
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
public Taxi(int i, int j){
super();
System.out.println("TAXI int int");
}
public void run(){
super.run();
}
public static void main(String[] args) {
Car c = new Taxi();
Car d = new Taxi(2,3);
Car e = new Car();
Taxi t = new Taxi();
Taxi t2 = (Taxi)new Car();
if(c instanceof Taxi){
System.out.println("TAXI");
}
if(e instanceof Car){
System.out.println("CAR");
}
c.run();
System.out.println(c.getI());
System.out.println(d.getI());
System.out.println(t.getI());
// System.out.println(t2.getI());
}
}
여기서 궁금한 점. 강제 형 변환을 했는데 컴파일 오류가 안나고 , 런타임 에러(ClassCastException)가 나는 것일까?
또
System.out.println(c.getI());
System.out.println(d.getI());
System.out.println(t.getI());
호출할 때, 왜 100이 출력될까. c의 타입은 Car여서 Car클래스의 i값에 접근하는 줄 알고 있는데, 왜 Taxi()의 인스턴스에 접근해서 100을 출력할까....