我正在使用JavaFX Shape
的子類,並且遇到了我認爲是一個相當奇怪的問題。我的目標是擴展這些形狀子類中的幾個(即Rectangle
,Circle
),以便將我自己的屬性添加到這些對象。例如,Rectangle
子類的擴展應該是這樣的:錯誤設計實踐:Java多繼承
public class MyRectangle extends javafx.scene.shape.Rectangle
implements SpecialInterface {
private SpecialAttributes specialAttributes;
// ...
// Constructors, getters and setters here
// ...
}
凡SpecialInterface
可以用來指定與將被添加到MyRectangle
和MyCircle
新屬性的方法,在這種情況下:
public interface SpecialInterface {
public SpecialAttributes getSpecialAttributes();
public void setSpecialAttributes();
}
然而,當我嘗試創建引用的Rectangle
和Circle
這些子類服務類,它好像我不能這樣做的一般。
public class ManipulationService{
public ManipulationService(<Undefined> myExtendedShape) {
// object from JavaFX Node, inherited by JavaFX Shapes (Circle, Rectangle, etc)
myExtendedShape.onRotate(new EventHandler<>(){
// ...
});
// a method from MyRectangle or MyCircle
myExtendedShape.getSpecialAttributes();
}
// ...
}
這裏的問題是,我不能爲我的擴展形狀,將上述替換<Undefined>
一個超:從本質上講,當我需要從兩個Shape
子類和SpecialInterface
接口使用屬性和方法的問題出現了。具體來說,如果我創建一個超類,由於缺乏多重繼承,我無法擴展我想在我的子類中擴展的特定形狀。但是,如果我將<Undefined>
替換爲Shape
,那麼我將無法訪問SpecialInterface
中的方法。
我敢肯定,這種多繼承問題之前已經解決了,但我找不到解決方案。我很感激所有關於如何處理這種情況的建議。
我認爲你應該多一點很清楚,爲什麼你提到的類沒有爲工作。爲什麼不製作自己的超級類型(MyShape)並使用它,使用所需的所有方法定義? –
markspace
2014-11-02 15:41:58
@markspace那麼你將如何定義'MyRectangle'?它必須從'MyShape'和'Rectangle'繼承,這是不可能的。 – 2014-11-02 15:49:34
那你去吧。不可能。我認爲這是一個[XY問題:](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)你認爲必須有一個解決方案,但可能有其他的方法是更好。根據形狀定義一個MyCircleRectangle並告訴我們爲什麼不起作用。 – markspace 2014-11-02 15:52:19