public class A
{
public void printA(){
System.out.println("A");
}
}
public class B extends A
{
public void printB(){
System.out.println("B");
}
}
public class C extends B
{
public void printC(){
System.out.println("C");
}
}
public class test {
public static void main(String[] args)
{
A a = new B();
a.printA(); // work
B b = (B) a;
b.printB(); // work
C c = (C) b;
c.printC(); // not work throw java.lang.ClassCastException
}
}
나는 세 가지 클래스 A를 가지고 있고 B와 C
C는 B에서 확장 B는
에서 확장 이유를 아래로 그들 사이의 관계에 있지만, A에서 B로 작업을 캐스팅, 그리고 C에 B에서 작동하지 않습니다 A와 B처럼, B는 C의 부모입니다. 그래서 JVM을 어떻게 작동합니까 ??간접적 인 하위 클래스로의 캐스팅이 작동하지 않습니까?
당신은 객체의 클래스를 변경할 수 없습니다, 당신은 참조 만의 클래스를 변경할 수 있습니다. –
내 코드에서 개체 클래스를 변경하려고하는 위치를 이해하지 못합니까? –
'(C) b'를 할 때 이것은 여러분이 객체의 타입을'C'로 바꾸는 척하려고하는 것이지만 그것을하지는 않습니다. Object의 유형은 항상 'B'입니다. –