Java中父类与子类的转换问题

mac2022-06-30  35

先看个例子:

1 class A { 2 public A() { 3 } 4 } 5 6 class B extends A { 7 public B() { 8 super(); 9 } 10 }

 上面定义了两个类,一个是类A,一个是由A派生而来的类B

再看主函数的代码:

public class TestDemo { public static void main(String[] args) { B b = new B(); A a = new A(); a = b; } }

这个不报错,也符合我们的逻辑,子类赋值给父类,就好比苹果(子类)是水果(父类)一样。

接下来才是重点:

public class TestDemo { public static void main(String[] args) { B b = new B(); A a = new A(); b=(B) a; } }

这段代码在编译时期不会出错,但运行时期却报错了:

Exception in thread "main" java.lang.ClassCastException: com.laowu.A cannot be cast to com.laowu.B

报错说:A类不能转换成B,为什么?其实“单纯的”父类是不能强转成子类的,这就好比:水果(父类)是苹果(子类)一样,不合逻辑。

但是下面这段代码编译和运行都不会出错:

1 public class TestDemo { 2 3 public static void main(String[] args) { 4 B b = new B(); 5 A a = new B(); 6 b = (B) a; 7 } 8 9 }

这段代码也是我初学时很纳闷的地方,但仔细想想就理解了,先看第5行代码,父类A由子类B创建的,之后第6行代码,子类对象b由父类a对象强制转换而来,这个就不是“单纯的”父类了,因为它和子类已经构建了联系

这就好比,首先说明了这个水果是苹果(构建了联系,第5行代码),之后说的这个水果,它就是苹果(第6行代码)

总结:

父类不能直接强转成子类,除非父类是由该子类创建而来的!

转载于:https://www.cnblogs.com/xiaoqiangwu/p/9902721.html

相关资源:Java中父类和子类之间的转换操作示例
最新回复(0)