java - 绕过不良设计实践 : Java Multiple Inheritance

标签 java inheritance javafx

我正在使用 JavaFX Shape子类,我遇到了一个我认为相当奇怪的问题。我的目标是扩展其中几个形状子类(即 RectangleCircle ),以便向这些对象添加我自己的属性。例如, Rectangle 的扩展名子类看起来像这样:

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 ,似乎我不能一般这样做。本质上,当我需要利用Shape中的属性和方法时,问题就出现了。子类和 SpecialInterface接口(interface):

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();
    }

    // ...
}

这里的问题是我无法为我的扩展形状创建一个父类(super class)来替换 <Undefined>多于。具体来说,如果我创建一个父类(super class),由于缺乏多重继承,我无法扩展我想要在子类中扩展的特定形状。如果我替换 <Undefined>Shape不过,我随后就失去了对 SpecialInterface 中方法的访问权限。 。

我确信这种多重继承问题以前已经解决过,但我找不到解决方案。我感谢任何有关如何处理这种情况的建议。

最佳答案

您可以像这样定义ManipulationService:

class ManipulationService<T extends Shape & SpecialInterface> {
    public ManipulationService(T myExtendedShape) {
        // method from Shape
        myExtendedShape.onRotate(/* ... */);

        // method from SpecialInterface
        myExtendedShape.getSpecialAttributes();
    }
}

关于java - 绕过不良设计实践 : Java Multiple Inheritance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26701005/

相关文章:

java - 在应用程序启动屏幕上输出一条消息,但只希望它在第一次查看此页面时出现(java)

c# - 继承 .NET 的通用 Controller 类

css - 文本字段 javaFX 中的提示文本

javafx,拖动优化 - 各种想法

java - 获取所有行 SQLite Android Studio

java - 如何使用APDU读取和下载ddd行车记录仪文件?

Java计算解压缩过程的进度

ios - 在 Swift(iOS)和 setValue forKey 中子类化 NSObject 的子类

c++ - 在 C++ 中为继承的嵌套类提供单独的数据类型

Javafx图表将NumberAxis更改为CategoryAxis