2011-07-11 14 views
0

我有一個名爲SHAPE的接口。 CIRCLERECTANGLE是實現這個接口的兩個類。現在我必須寫一個班級(我可以選擇只寫一個班級)CIRCULARRECTANGLE這將擴展CIRCLERECTANGLE的屬性。如何在Java中做到這一點?如何在Java中設計以下結構?

+2

Java可以不一個圓圈。 –

+0

@Andreas_D我同意100% –

+0

我認爲這裏常見的方法是'area()'。 :-) –

回答

2

由於Java一次只擴展一個類,所以您將需要創建抽象類以符合您的條件。

例子:

public abstract class AbstractRectangle extends Rectangle { 

public abstract class AbstractCircularRectangle extends AbstractRectangle { 

public class CircularRectangle extends AbstractCircularRectangle { 

更新:我第一次嘗試將從未工作,因此我的更新:

自從我第一次嘗試從未延長一個Circle,你會需要繼續參考eiter a CircleRectangle,如下所示:

public class CircularRectangle extends Rectangle { 

    private Circle circle; 

    public CircularRectangle(Circle circle) { 
     this.circle = circle; 
    } 

    // Some logic: 
} 

構造函數的作用是保持對圓的引用。

+0

但是你不擴展Circle!? – THelper

+0

噢,謝謝....更新。 –

3

你不能直接這樣做。一個Java類總是隻能擴展一個類。

可能使用代表團獲得類似的效果。你的CircularRectangle(不管那可能代表!)可能參考 a CircleRectangle對象和「呈現」它們自己的屬性。

+0

那麼,這個問題是模棱兩可的。你不知道'SHAPE'看起來像 –

+0

@Op:這就是爲什麼我沒有進一步評論這是否有用的原因。 –

0

由於java不允許多重繼承,所以這是不可能的。你不能讓一個類擴展超過一個超類。 嘗試使用組合而不是繼承。

2

Java不允許multiinheritance,也許你可以使用組成做到:

CIRCULARRECTANGLE實現SHAPE

CIRCULARRECTANGLE也含有。然後你執行的CIRCULARRECTANGLE使用按照你的邏輯這兩個實例的方法CIRCLERECTANGLE一個實例。

1

我會定義2個接口圓形和矩形。你的類將實現這些接口。然後你可以定義擴展兩個接口的接口CircularRectangle。 tridr類CircularRectangle應該包含2個實例cirlceInstance和rectangleInstance,並委託調用實例中的必要方法。

3

我們不能定義一個類是,一個CircleRectangle - 只要這兩個實體類。

爲了解決地方這種精神分裂的行爲需要一個問題,我們可以考慮使用適配器模式(假設,我們有一個圓,矩形接口和具體的實現)

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; 
} 
} 
+0

+1指出一個'CircularRectangle'既不是'Cirle'也不是'Rectangle',所以不應該延伸 - 一個共同的遺傳誤解。 – Qwerky