2014-01-30 61 views
1

我是新來的Java,現在已經服用一個療程的幾個星期,並已要求完成計劃包含以下信息:的Java - 理解繼承

  1. 設計的船舶類具有以下數據字段:

    • 船舶名稱(字符串)的數據字段。

    • 該船建造年份的數據字段(int)。

    • 構造函數和適當的訪問器和增變器。

    • 一個toString方法,用於顯示船名和建造年份。

  2. 設計擴展Ship類的CruiseShip子類。 CruiseShip類應具有以下內容:

    • 乘客最大數量(一個int)的額外數據字段。

    • 構造函數和適當的訪問器和增變器。

    • 重寫toString方法的基類中的toString方法。 CruiseShip類的toString方法還應該包括最大乘客數限制 。

  3. 設計一個擴展Ship類的CargoShip類。貨物類別應具有以下內容:

    • 貨運噸位(一個int)的額外數據字段。

    • 構造函數和適當的訪問器和增變器。

    • 重寫在基類toString方法甲toString方法。貨運艙的toString方法還應該包括貨物噸位 。

  4. 在適當類包括equals方法來測試,如果兩艘船都是平等的 - 他們應該被認爲是相等的,如果他們有 相同的名稱和建於同一年。

  5. 演示程序中的(ShipTester),其具有船舶的對象(它們中的至少5)的陣列的類。將各種Ship,CruiseShip, 和CargoShip對象分配給陣列元素(您可以對 對象和數據進行硬編碼)並打印出初始發貨配置。顯示 ,您可以在船舶的取樣 上同時使用訪問器和增變器方法(同樣,如果您喜歡 ,則可以在此硬編碼方法參數)。

我明白了什麼的問題是問的基礎,我也做了以下內容:

Ship.java

public class Ship { 

    private String name; 
    private int yearBuilt; 

    public Ship(String name, int yearBuilt) { 

     this.name = name; 
     this.yearBuilt = yearBuilt; 

    } 

    public String returnName() { 

     return this.name; 

    } 

    public int returnYear() { 

     return this.yearBuilt; 

    } 

    public boolean equals(Ship other) { 

     return false; 

    } 

    public String toString() { 

     return "[Name: " + this.name + ". Year built: " + this.yearBuilt + "]"; 

    } 
} 

CruiseShip.java

​​

CargoShip.java

public class CargoShip extends Ship { 

    private int cargoCapacity; 

    public CargoShip() { 

     super("Black Pearl", 1699); 

     this.cargoCapacity = 50000; 

    } 

    public CargoShip(String name, int yearBuilt, int cargoCapacity) { 

     super(name, yearBuilt); 
     this.cargoCapacity = cargoCapacity; 

    } 

    public String toString() { 

     return "Cargo Ship" + super.toString() + ", Tonnage: " + this.cargoCapacity + "]"; 

    } 

} 

,在我的測試文件 - ShipTester.java

public class ShipTester { 
    public static void main(String []args) { 

     //I don't know what to put over here... 

    } 
} 

我不知道要放什麼東西在main方法......我知道我要創建船舶的數組,但我不知道怎麼做,與貨船,遊船等...

輸出我應該有:

顯示船舶: 船[名稱:安妮女王復仇號年內置:1701]

郵輪[船[名稱:企業號航空母艦建造年份:2245]乘客:2400]

貨船[船[名稱:黑珍珠年份:1699],噸位:50000]

克魯斯船[船[名稱:USS航海年份:2371]乘客:2800]

貨船[船[名稱:勝利建成年份:1790],噸位:33100]

+0

提示,你剛纔說的答案:* ...我必須創建一個船隻陣列... * –

+1

'船舶[]船=新船[5];'然後分配'船[0] = ....'。你可以做到這一點,我敢肯定,只要給它一下,看看會發生什麼。 –

+0

另外,您的'等號'方法在您的'Ship'類中不正確。它需要根據您的要求測試'yearBuilt'和'name'。 –

回答

2

擴展到什麼氣墊船說但您可能想要使用ArrayList作爲對象數組。

Creating an Arraylist of Objects

ArrayList<Ship> myArray = new ArrayList(); 
myArray.add(new CargoShip("TheKing",1990,10000)); 
myArray.add(new CruiseShip("Princess",2000,5000)); 

[編輯]忘了你需要打印過

您可以使用一個簡單的for循環進行打印,例如:

for (int i = 0; i < myArray.size(); i++) { 
    System.out.println(myArray.get(i).toString()); 
} 

注意 - 這不是確切的答案,我不想在你的學習過程的跳躍。但是,這至少應該給你,你可以採取的路徑的想法...

+2

1)他的指令提到了創建一個數組,而不是像ArrayList這樣的集合。 2)在'println(...)'語句中不需要'toString()'調用,因爲它默認被調用。後者是一個小問題,但我的第一個陳述更重要。 –

0

Ship是將所有其他類爲普通家庭「基地」父類。這意味着CruiseShipCargoShip實際上可以僞裝成Ship。這是Polymorphism的基石,也是使面向對象程序如此強大的特性之一。

根據您的示例代碼,你只需要創建Ship類型的數組,例如...

Ship[] ships = new Ship[5]; 

,那麼只需在需要填寫此陣列,船舶的分類...

ships[0] = new CargoShip("Lolli Pop", 1965, 1990); 
ships[1] = new CruiseShip("Love Boat", 1980, 8); 

這意味着,每一個元素「行爲」爲Ship,因爲CargoShipCruiseShipShip繼承,這給了他們這樣做的能力,因爲他們是「船」

因爲由它定義爲Ship顯示信息的toString方法喲你可以簡單地使用System.out.println(instanceOfShip)來打印它。例如...

for (Ship ship : ships) { 
    System.out.println(ship); 
} 

採取在Inheritance定睛一看,Arrays更多細節

這似乎令人困惑,令人望而生畏,但一旦你理解繼承的基礎,它會變得非常明顯,很強大的

+0

謝謝!我可以得到關於如何執行equals方法的提示嗎?我正在考慮'public boolean equals(ship [0],ship [1])' – Vanessa

+0

*這兩行的內容,「如果它們具有相同的名稱並且在同一年內構建,它們應該被認爲是相等的」 returnName和returnYear對於兩艘船來說都是相同的。通常通過將一個實例傳遞給另一個例如'ship [0] .equals(ship [1])'來完成'equals',這取決於答案中的示例 – MadProgrammer