向下转换为间接子类不起作用?

时间:2016-10-17 10:48:07

标签: java inheritance casting multiple-inheritance downcast

        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
延伸 为什么从A到B的下行工作,并且从B到C不起作用,虽然它们之间的关系像A和B,B是C的父类,所以它如何工作JVM ??

1 个答案:

答案 0 :(得分:6)

只能将类转换为其父类,它们不了解其子类。

由于您的对象是B的实例,因此它不会实现C的方法。

这将有效:

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

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

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