对象声明与Java中的赋值

问题描述 投票:-4回答:3
interface Drivable{}
class Vehicle implements Drivable{}
class Car extends Vehicle{}

Vehicle x= new Vehicle();
Drivable x= new Vehicle();
Car x = new Vehicle();
Object x = new Vehicle();
Vehicle[] x = new Vehicle();

有多少是对的?我很困惑,如果第二个Drivable = ...和第四个对象x = ..是正确的

java variable-assignment variable-declaration
3个回答
0
投票

车x =新车();是错的,而Vehicle [] x = new Vehicle();是错的。

第二个语句很好 - 没有问题,声明了一个指向接口的具体实现的接口。实际上是最佳实践(抽象和隐藏实现)。

第3个语句是非法的 - 您不能声明将引用基类的具体实现。为什么?你会错过声明类型的预期行为....

第四个语句很好,类似于第二个语句,只使用基类实现类而不是接口。

第5个语句错误但很容易修复:Vehicle [] x = {new Vehicle()};


0
投票

你所有的类都是“Drivable”类型

“车辆”类型为“可驾驶”,“汽车”类型为“车辆”,因此“汽车”是“车辆”。

“汽车”和“汽车”都是“可驾驶的”。

除了“Car x = new Vehicle();”之外,所有初始化都是正确的。和数组初始化,这应该是这样的

Vehicle[] x = new Vehicle[] { 
    //Vehicles go here
};

0
投票

这是错误的,因为每辆车都是车辆而不是其他方式,即每辆车都不是汽车。继承是“类型”,即汽车是车辆的类型。

Car x = new Vehicle();

这里的x是数组类型,因此初始化是错误的。

Vehicle[] x = new Vehicle();

它应该是

Vehicle[] x = new Vehicle[size];
© www.soinside.com 2019 - 2024. All rights reserved.