【问题标题】:Declaration of objects vs their assignment in Java对象的声明与它们在 Java 中的分配
【发布时间】:2023-04-07 19:04:01
【问题描述】:
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=.. 是对的

【问题讨论】:

  • 您为什么不尝试一下,即自己做一点研究
  • 对继承的快速搜索将回答您的问题。

标签: java variable-assignment variable-declaration


【解决方案1】:

汽车 x = new Vehicle();错了,Vehicle[] x = new Vehicle();错了。

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

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

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

第 5 条语句是错误的,但很容易修复: 车辆[] x = {新车辆()};

【讨论】:

    【解决方案2】:

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

    “Vechile”属于“Drivable”类型,“Car”属于“Vehicle”类型,因此“Car”就是“Vehicle”。

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

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

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

    【讨论】:

      【解决方案3】:

      这是错误的,因为每辆车都是车辆,但不是相反,即每辆车都可能不是汽车。继承是“类型”,即汽车是车辆的类型。

      Car x = new Vehicle();
      

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

      Vehicle[] x = new Vehicle();
      

      应该是

      Vehicle[] x = new Vehicle[size];
      

      【讨论】:

        猜你喜欢
        • 2013-10-19
        • 2016-12-24
        • 1970-01-01
        • 2016-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多