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 = ..是正确的
车x =新车();是错的,而Vehicle [] x = new Vehicle();是错的。
第二个语句很好 - 没有问题,声明了一个指向接口的具体实现的接口。实际上是最佳实践(抽象和隐藏实现)。
第3个语句是非法的 - 您不能声明将引用基类的具体实现。为什么?你会错过声明类型的预期行为....
第四个语句很好,类似于第二个语句,只使用基类实现类而不是接口。
第5个语句错误但很容易修复:Vehicle [] x = {new Vehicle()};
你所有的类都是“Drivable”类型
“车辆”类型为“可驾驶”,“汽车”类型为“车辆”,因此“汽车”是“车辆”。
“汽车”和“汽车”都是“可驾驶的”。
除了“Car x = new Vehicle();”之外,所有初始化都是正确的。和数组初始化,这应该是这样的
Vehicle[] x = new Vehicle[] {
//Vehicles go here
};
这是错误的,因为每辆车都是车辆而不是其他方式,即每辆车都不是汽车。继承是“类型”,即汽车是车辆的类型。
Car x = new Vehicle();
这里的x是数组类型,因此初始化是错误的。
Vehicle[] x = new Vehicle();
它应该是
Vehicle[] x = new Vehicle[size];