Java中的惯性

问题描述 投票:0回答:1

假设我有以下代码,它们运行时没有任何编译/运行时错误:

B b1 = new A();
B b2 = new C();
A a1 = (C) b2;
D d1 = new C();
B b3 = new B();
D d2 = new A();
D d3 = new B();
E e1 = new E();
D e2 = new E();
B e3 = new E();
C c1 = new C();

我需要弄清楚类之间的关系。据我了解:

(head) D <- B <- A <- C

我有两个问题:

  1. 我将E放在哪里?可以在B / A / C中的任何地方吗?

  2. 为什么当我设置Object var = new A();然后尝试((C)var).someMethod();时,我得到运行时错误提示Class A can not be cast to class C?到目前为止,根据我的经验,我只能在Java中向下转换(正确吗?)。如果我尝试交换AC,则会出现A a1 = (C) b2;的编译错误,因此我猜想C必须继承自A

java inheritance
1个回答
1
投票

我在哪里放置E?它可以在B / A / C中的任何位置吗?

使用您提供的代码,可以使用以下任何层次结构。

enter image description here

我收到运行时错误提示Class A can not be cast to class C

这是因为您可以将子类的实例大小写为其父类型,但是不能用其他方式。因此,您无法将A的实例强制转换为C

© www.soinside.com 2019 - 2024. All rights reserved.