簡體   English   中英

對象的聲明與它們在 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=... 和 4th Object x=.. 是正確的

汽車 x = 新車輛(); 錯了,Vehicle[] x = new Vehicle(); 是錯的。

第二條語句很好 - 聲明一個指向接口的具體實現的 iterface 沒有問題。 最佳實踐(抽象和隱藏實現)。

第三條語句是非法的 - 您不能聲明將引用基類的具體實現。 為什么 ? 您將缺少聲明類型的預期行為....

第 4 條語句很好,與第 2 條語句類似,只是使用基實現類而不是接口。

第 5 條語句是錯誤的但很容易修復: Vehicle[] x = {new Vehicle()};

您所有的課程都屬於“可駕駛”類型

“Vechile”屬於“Drivable”類型,“Car”屬於“Vehicle”類型,因此“Car”就是“Vehicle”。

“汽車”和“車輛”都是“可駕駛的”。

所有的初始化都是正確的,除了“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];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM