对象声明与Java中的赋值

时间:2018-02-28 03:43:04

标签: java variable-assignment variable-declaration

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 = ..是对的

3 个答案:

答案 0 :(得分:0)

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

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

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

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

第五种说法错误但容易修复: Vehicle [] x = {new Vehicle()};

答案 1 :(得分:0)

您的所有课程类型均为“可驾驶”

“Vechile”的类型为“Drivable”,“Car”的类型为“Vehicle”,因此“Car”是“Vehicle”。

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

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

vector[1]

答案 2 :(得分:0)

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

Car x = new Vehicle();

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

Vehicle[] x = new Vehicle();

应该是

Vehicle[] x = new Vehicle[size];