我有一個名爲SHAPE
的接口。 CIRCLE
和RECTANGLE
是實現這個接口的兩個類。現在我必須寫一個班級(我可以選擇只寫一個班級)CIRCULARRECTANGLE
這將擴展CIRCLE
和RECTANGLE
的屬性。如何在Java中做到這一點?如何在Java中設計以下結構?
回答
由於Java一次只擴展一個類,所以您將需要創建抽象類以符合您的條件。
例子:
public abstract class AbstractRectangle extends Rectangle {
public abstract class AbstractCircularRectangle extends AbstractRectangle {
public class CircularRectangle extends AbstractCircularRectangle {
更新:我第一次嘗試將從未工作,因此我的更新:
自從我第一次嘗試從未延長一個Circle
,你會需要繼續參考eiter a Circle
或Rectangle
,如下所示:
public class CircularRectangle extends Rectangle {
private Circle circle;
public CircularRectangle(Circle circle) {
this.circle = circle;
}
// Some logic:
}
構造函數的作用是保持對圓的引用。
但是你不擴展Circle!? – THelper
噢,謝謝....更新。 –
你不能直接這樣做。一個Java類總是隻能擴展一個類。
你可能使用代表團獲得類似的效果。你的CircularRectangle
(不管那可能代表!)可能參考 a Circle
和Rectangle
對象和「呈現」它們自己的屬性。
那麼,這個問題是模棱兩可的。你不知道'SHAPE'看起來像 –
@Op:這就是爲什麼我沒有進一步評論這是否有用的原因。 –
由於java不允許多重繼承,所以這是不可能的。你不能讓一個類擴展超過一個超類。 嘗試使用組合而不是繼承。
Java不允許multiinheritance,也許你可以使用組成做到:
CIRCULARRECTANGLE
實現SHAPE
。
CIRCULARRECTANGLE
也含有。然後你執行的CIRCULARRECTANGLE
使用按照你的邏輯這兩個實例的方法CIRCLE
和RECTANGLE
一個實例。
我會定義2個接口圓形和矩形。你的類將實現這些接口。然後你可以定義擴展兩個接口的接口CircularRectangle。 tridr類CircularRectangle應該包含2個實例cirlceInstance和rectangleInstance,並委託調用實例中的必要方法。
我們不能定義一個類是,一個Circle
和Rectangle
- 只要這兩個實體類。
爲了解決地方這種精神分裂的行爲需要一個問題,我們可以考慮使用適配器模式(假設,我們有一個圓,矩形接口和具體的實現)
public class CircleImpl implements Circle {
// fields, constructors, implemented Circle methods
public Object adapt(Class<? extends Shape> adaptee) {
if (adaptee == Rectangle.class) {
return new Rectangle() {
// implemented rectangle methods so that
// we have a squared circle
};
}
return null;
}
}
+1指出一個'CircularRectangle'既不是'Cirle'也不是'Rectangle',所以不應該延伸 - 一個共同的遺傳誤解。 – Qwerky
- 1. 如何在java中設計合適的類結構
- 2. 如何在golang中初始化以下結構的結構
- 3. 如何在這種情況下使用ZeroMQ設計結構
- 4. 如何實現在HTML以下設計
- 5. 設計數據結構/ Java數據結構
- 6. SQL結構設計
- 7. 如何設計類層次結構
- 8. SQL表結構 - 如何設計?
- 9. 如何創建/設計數據結構?
- 10. 如何設計CAD包裝的結構?
- 11. 如何設計一個數據結構?
- 12. 如何爲Java應用程序設計日誌結構
- 13. 以下結構是否被視爲設計模式?
- 14. 類的設計結構,在C#中
- 15. 如何使用貓鼬爲以下產品設計架構?
- 16. 如何在繼承層次結構中設計字段?
- 17. 如何在ASP.NET中設計應用程序體系結構
- 18. 如何在Mysql中設計類似的結構表
- 19. 如何在結構化Framemaker中設計DITA外部參照
- 20. 如何設置以樹形結構
- 21. 結構在Java中如何工作?
- 22. 如何在Java中存儲樹結構?
- 23. 如何在Java中創建樹結構?
- 24. 如何在java中創建json結構?
- 25. 如何在Java中實現設置數據結構?
- 26. 如何設置以下架構
- 27. 如何在WPF中創建以下列表/表結構?
- 28. 如何在Go中解析以下JSON結構
- 29. 如何在django中讀取以下結構,python
- 30. 如何在wso2中創建以下請求結構dss
Java可以不一個圓圈。 –
@Andreas_D我同意100% –
我認爲這裏常見的方法是'area()'。 :-) –