Java 中的对象声明与赋值
Declaration of objects vs their assignment in Java
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=...
和第 4 个对象 x=.. 是正确的
Car x = new Vehicle();是错误的,Vehicle[] x = new Vehicle();错了。
第二条语句很好 - 声明一个指向接口具体实现的接口没有问题。实际上的最佳实践(抽象和隐藏实现)。
第三条语句是非法的 - 您不能声明将引用基础 class 的具体实现。为什么 ?您将缺少声明类型的预期行为....
第 4 条语句很好,类似于第 2 条语句,只是使用了实现 class 而不是接口的基础。
第 5 条陈述是错误的,但很容易修复:
车辆[] x = {新车辆()};
你所有的 类 都是 "Drivable"
类型
"Vechile" 是 "Drivable" 类型,"Car" 是 "Vehicle" 类型,因此 "Car" 是 "Vehicle"。
"Car"和"Vehicle"都是"Drivable"。
你的所有初始化都是正确的,除了 "Car x = new Vehicle();" 和数组初始化,它应该看起来像这样
Vehicle[] x = new Vehicle[] {
//Vehicles go here
};
这是错误的,因为每辆车都是车辆,但反之则不然,即每辆车可能都不是汽车。继承是 "type of" 即 car 是车辆类型。
Car x = new Vehicle();
这里的x是数组类型,所以初始化错误
Vehicle[] x = new Vehicle();
应该是
Vehicle[] x = new Vehicle[size];
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=... 和第 4 个对象 x=.. 是正确的
Car x = new Vehicle();是错误的,Vehicle[] x = new Vehicle();错了。
第二条语句很好 - 声明一个指向接口具体实现的接口没有问题。实际上的最佳实践(抽象和隐藏实现)。
第三条语句是非法的 - 您不能声明将引用基础 class 的具体实现。为什么 ?您将缺少声明类型的预期行为....
第 4 条语句很好,类似于第 2 条语句,只是使用了实现 class 而不是接口的基础。
第 5 条陈述是错误的,但很容易修复: 车辆[] x = {新车辆()};
你所有的 类 都是 "Drivable"
类型"Vechile" 是 "Drivable" 类型,"Car" 是 "Vehicle" 类型,因此 "Car" 是 "Vehicle"。
"Car"和"Vehicle"都是"Drivable"。
你的所有初始化都是正确的,除了 "Car x = new Vehicle();" 和数组初始化,它应该看起来像这样
Vehicle[] x = new Vehicle[] {
//Vehicles go here
};
这是错误的,因为每辆车都是车辆,但反之则不然,即每辆车可能都不是汽车。继承是 "type of" 即 car 是车辆类型。
Car x = new Vehicle();
这里的x是数组类型,所以初始化错误
Vehicle[] x = new Vehicle();
应该是
Vehicle[] x = new Vehicle[size];