可转换与否?

时间:2016-07-12 10:09:53

标签: java

假设课程AB继承了课程C

public class A extends C {}

public class B extends C {}

我们如何转换类型,即

A a;
B b;
a = (A) b;

我尝试了,但它宣布error: inconvertible type

3 个答案:

答案 0 :(得分:5)

如果存在“is a”关系,则只能转换引用。 AB之间没有“是一种”关系。 A C,而B C,但是B 不是 A

考虑:苹果(B)和橙子(A)都是水果(C),但苹果不是橙子。

注意:在Java中,“转换”意味着“将某些东西变成其他东西”。您可以转换 Stringint,例如,通过Integer.parseInt。这不是铸造操作员的作用;铸造操作员只是改变了你所拥有的参考的类型,而不是实际的东西。

答案 1 :(得分:0)

您无法将B投射到A,因为B不会延伸A.只是因为两者都延伸C,并不意味着它们是可转换的。

答案 2 :(得分:0)

你无法“转换”它,原因很简单,但最重要的是:

如果A有一个字段或方法B没有,那么调用它们是没有意义的。正确的方法是对你的超类C进行编码,它允许A或B作为它的实现。