代码之家  ›  专栏  ›  技术社区  ›  Z Cherry

Java中对象的声明与赋值

  •  -4
  • Z Cherry  · 技术社区  · 6 年前
    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();
    

    其中有多少是对的? 我很困惑,如果第二个可以驾驶=。。。 第四个物体x=。。都是对的

    3 回复  |  直到 6 年前
        1
  •  0
  •   Rann Lifshitz rul    6 年前

    车辆x=新车();错误,且车辆[]x=新车();是错误的。

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

    第三条语句是非法的-您不能声明引用基类的具体实现。为什么?您将缺少所声明类型的预期行为。。。。

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

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

        2
  •  0
  •   Joe    6 年前

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

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

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

    除了“Car x=new Vehicle();”之外,您的所有初始化都是正确的以及数组初始化,应该如下所示

    Vehicle[] x = new Vehicle[] { 
        //Vehicles go here
    };
    
        3
  •  0
  •   Santosh Thapa    6 年前

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

    Car x = new Vehicle();
    

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

    Vehicle[] x = new Vehicle();
    

    应该是这样的

    Vehicle[] x = new Vehicle[size];