假设课程A
和B
继承了课程C
。
public class A extends C {}
public class B extends C {}
我们如何转换类型,即
A a;
B b;
a = (A) b;
我尝试了,但它宣布error: inconvertible type
。
答案 0 :(得分:5)
如果存在“is a”关系,则只能转换引用。 A
和B
之间没有“是一种”关系。 A
是 C
,而B
是 C
,但是B
不是 A
。
考虑:苹果(B
)和橙子(A
)都是水果(C
),但苹果不是橙子。
注意:在Java中,“转换”意味着“将某些东西变成其他东西”。您可以转换 String
到int
,例如,通过Integer.parseInt
。这不是铸造操作员的作用;铸造操作员只是改变了你所拥有的参考的类型,而不是实际的东西。
答案 1 :(得分:0)
您无法将B
投射到A
,因为B不会延伸A.只是因为两者都延伸C
,并不意味着它们是可转换的。
答案 2 :(得分:0)
你无法“转换”它,原因很简单,但最重要的是:
如果A有一个字段或方法B没有,那么调用它们是没有意义的。正确的方法是对你的超类C进行编码,它允许A或B作为它的实现。