有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如果不能更改父类,java将公共属性和方法实现放在哪里?

我正在使用JavaFX,特别是:

  • javafx.scene.shape.Rectangle
  • javafx.scene.shape.Ellipse
  • javafx.scene.shape.Line

我需要额外的方法,所以我创建了接口MoreFunctions。我创建了三个新类,它们从上述类继承并实现MoreFunctions,即:

public class MyRectangle extends javafx.scene.shape.Rectangle implements MoreFunctions {
...
}

只要MyRectangleMyEllipse有其他方法的不同实现,这就可以了但是我应该把具有相同实现的方法放在哪里呢我无法更改父类,因为我无法修改框架默认接口方法是唯一(可行)的方法吗?那么,方法所依赖的公共属性呢

编辑:一个常用方法的示例

public void toggleSelection() {
    if (!selected) {
        setStrokeWidth(5);
        setStroke(Color.RED);
        selected = true;
    }
    else {
        setStrokeWidth(0);
        selected = false;
    }
}

这需要

private boolean selected;

共 (1) 个答案

  1. # 1 楼答案

    听起来有点像你在寻找mixin功能,而doesn't really exist in Java。你可以simulate mixins using Java 8 functionality或通过special purpose 3rd party mixin support library

    然而,对于其他开发人员来说,如果使用传递方法或组合对象,事情可能会更直接一些。每个Shape子类都可以delegate将功能转换为实现特定功能(例如选择切换)的公共类,而不是依赖默认方法等新的语言功能

    通过检查各种JavaFX类中处理选择功能的方式,您可以看到可继承或固有功能与委托或组合方法的区别ToggleButton有一个selectedProperty,因此它直接实现了选择功能。然而,ListView有一个selectionModelProperty,因此ListView的选择建模功能被委托给一个相关的类,而不是直接在ListView本身中实现

    当然,当你有MVC风格的系统,比如JavaFX Controls时,事情会变得有点复杂,但是你可能不需要把你的系统编码到那种复杂的程度。但是,您可能需要检查CSS support is added to controls,并考虑使用类似的基于CSS的支持来实现诸如选择所选形状的功能,而不是直接在代码中编码样式。p>