0
 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을 어떻게 작동합니까 ??간접적 인 하위 클래스로의 캐스팅이 작동하지 않습니까?

+1

당신은 객체의 클래스를 변경할 수 없습니다, 당신은 참조 만의 클래스를 변경할 수 있습니다. –

+0

내 코드에서 개체 클래스를 변경하려고하는 위치를 이해하지 못합니까? –

+0

'(C) b'를 할 때 이것은 여러분이 객체의 타입을'C'로 바꾸는 척하려고하는 것이지만 그것을하지는 않습니다. Object의 유형은 항상 'B'입니다. –

답변

6

클래스는 상위 클래스에만 캐스트 할 수 있지만 하위 클래스에 대해서는 알지 못합니다.

개체가 B의 인스턴스이므로 C의 메서드를 구현하지 않습니다.

이 작동합니다

A a = new C(); 
    a.printA(); // work 

    B b = (B) a; 
    b.printB(); // work 

    C c = (C) b; 
    c.printC(); // work 
+0

왜이 작품이 더 자세한 설명과 함께 할 수 있습니까 ?? –

+0

클래스는 부모 클래스에만 캐스트 할 수 있지만 자식 클래스에게는 캐스트 할 수 없습니다. 왜냐하면 클래스는 선글라스에 대해 아무것도 모르기 때문입니다. – maxpovver

+0

설명해 주셔서 감사합니다. –

관련 문제