2013-06-30 159 views
0

你好我有我的Java練習這些類:矩形和橢圓。是矩形的方形的孩子還是我應該做特殊的構造函數?形狀的類層次結構

// constructor for Square 
public Rectangle(double side) { 
    this.width = side; 
    this.height = side; 
} 

橢圓的圓形子(擴展)?

這可能是一個簡單的應用程序,如Kojo或Geogebra。

+0

它應該是子接口。 –

+0

你的練習的任務是什麼? – Behe

+0

對我來說不清楚,圈子類在哪裏? – Sello

回答

2

是的,這似乎是合理的認爲Square的作爲Rectangle一個子類爲其中兩個的寬度和高度是相等的:

public Square(double side) { 
    super(side, side); // reference to Rectangle constructor 
} 

類似地,同樣可以爲Circle可以說,它實質上是橢圓形的其中兩個主要和次要半徑相等:

public Circle(double radius) { 
    super(radius, radius); // reference to Ellipse constructor 
} 

無論你想創建的具體子類來表示這些形狀是由你,你應該做哪個更有意義在你的程序中。

+1

謝謝,這真的幫了我。 – uetoyo

+0

@ user2490538很高興能提供幫助:) – arshajii

1

這裏的問題是:你是否創建了這個層次結構或僅僅是爲了設計的緣故?

如果您正在爲設計進行設計,請創建一個延伸自Rectangle的類,否則只會讓您的代碼更加複雜而沒有任何實際的改進。你可以應用相同的圓/橢圓問題

1

也不! 兩者都應該是抽象形狀的子類。您可能想在此基類中進行一些座標轉換,以便子類可以簡單地實現以原點爲中心的圓或方形。但是你不希望其中一個是另一個的子類。

爲什麼? 因爲你必須設計行爲/接口,而不是數據!根據我的經驗,設計數據幾乎總是會導致令人費解的設計。

而且,除非您有具體的理由實際提供圓/矩形類(請參閱下面的註釋),否則爲圓形添加額外的類似乎不是一個好主意,因爲您已經有一個橢圓,只是多餘的代碼。我會使用專門的構造函數來構造更多的約束情況。

+0

兩個* can *都是抽象類Shape的子類,它們之間也是等級連接的。另外,我不同意冗餘代碼。雖然它更多地依賴於OP所要做的事情,但是當創建一個應該易於使用和理解的公共API時,可能有一個獨立的'Circle'類(意思是「甚至不需要任何多餘的代碼,因爲一切都將在'橢圓'中處理)。 「Square」同樣如此。 – arshajii

+0

也就是說,我會使用專門的構造函數,但我仍然認爲,您在這裏有一個要點。更新了答案以反映這一點。 – cmaster