有人会解释在Java中使用转换对象的概念以及使用子类代替超类吗?还使用超类代替子类?
我已经阅读了一些书籍和在线资料,但由于某些原因我只是没有得到这个概念......
例如,如果a具有此类结构,其中object是基类,而Vehichle扩展了对象类。然后,如果我们有2个额外的类别“汽车”,其延伸“Vehichle”和“摩托车”,其也延伸车辆。对象转换如何工作?什么时候需要进行演绎?演员何时会隐含?
对象 | 车辆 | 汽车 - 摩托车
答案 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(左)仍然有效(鉴于它们是在车辆中定义的)。一旦你试着放下窗户,事情就会开始出错......
极度怀疑地查看所有明确的演员阵容。