对象强制转换子类/超类

时间:2014-01-01 15:53:51

标签: java

有人会解释在Java中使用转换对象的概念以及使用子类代替超类吗?还使用超类代替子类?

我已经阅读了一些书籍和在线资料,但由于某些原因我只是没有得到这个概念......

例如,如果a具有此类结构,其中object是基类,而Vehichle扩展了对象类。然后,如果我们有2个额外的类别“汽车”,其延伸“Vehichle”和“摩托车”,其也延伸车辆。对象转换如何工作?什么时候需要进行演绎?演员何时会隐含?

对象   | 车辆   | 汽车 - 摩托车

2 个答案:

答案 0 :(得分:0)

当你有两个类型不是原始且不同的变量时:

A a; 
B b;

如果要将a分配给b(b = a),如果A不是B的子类,则必须使用显式强制转换。如果A是B的子类,则可以使用隐式强制转换。在你的情况下:

Car c =new Car();
Motorcycle m=new Motorcycle();
Vehicle v=new Motorcycle();
v=c;//Implicit cast, because Car is a subclass of Vehicle;
c=(Car)v;//Explicit cast, because Vehicle is not a subclass of Car;
m=(Motorcycle)c;//Doesn't compile even with explicit cast because an instance referenced by a Car variable may never be referenced by a Motorcycle variable 

答案 1 :(得分:0)

从后代到祖先的铸造是隐含的,事实上你最好不要将其视为一个演员阵容。摩托车是一种车辆,所以任何期待车辆的方法都会乐意接受它。

进入任何其他方向都是有问题的,需要明确的演员。你可以告诉编译器你的摩托车是一辆汽车,它会相信你。 Wheels.count仍然有效,Turn(左)仍然有效(鉴于它们是在车辆中定义的)。一旦你试着放下窗户,事情就会开始出错......

极度怀疑地查看所有明确的演员阵容。