Java 像这样使用继承是对的?

Java 像这样使用继承是对的?,java,class,inheritance,diagram,Java,Class,Inheritance,Diagram,我是学习Java继承的学生 我正在制作一个程序(比特币挖掘游戏) 我做了一个关于挖掘机的类图 在节目中, 有一个普通的挖掘机(这只挖硬币) 超频挖掘机(这可以挖掘并且可以超频以更快地挖掘)和 耐久性恢复挖掘机(可以挖掘、超频和恢复耐久性(每个挖掘机都有耐久性,挖掘时耐久性下降) (有一些属性和方法我没有在图片中描述。我认为我的问题不需要这些。) 我不确定我是否做对了。我希望得到一些关于继承的反馈 或者不使用继承。我应该创建这样的类吗 因为只有一个函数添加到类中 感谢您的阅读!这可能是装饰器模

我是学习Java继承的学生

我正在制作一个程序(比特币挖掘游戏)

我做了一个关于挖掘机的类图

在节目中,

有一个普通的挖掘机(这只挖硬币)

超频挖掘机(这可以挖掘并且可以超频以更快地挖掘)和

耐久性恢复挖掘机(可以挖掘、超频和恢复耐久性(每个挖掘机都有耐久性,挖掘时耐久性下降)

(有一些属性和方法我没有在图片中描述。我认为我的问题不需要这些。)

我不确定我是否做对了。我希望得到一些关于继承的反馈

或者不使用继承。我应该创建这样的类吗

因为只有一个函数添加到类中


感谢您的阅读!

这可能是装饰器模式的一个很好的候选者,它允许您在运行时将自定义功能应用于单个对象。Wikipedia页面上提供了一个很好的参考,其中包括一个窗口系统的详细示例,并提供了一个UML类图供参考f代码显示装饰器和混凝土装饰器:

// abstract decorator class - note that it implements Window
abstract class WindowDecorator implements Window {
    private final Window windowToBeDecorated; // the Window being decorated

    public WindowDecorator (Window windowToBeDecorated) {
        this.windowToBeDecorated = windowToBeDecorated;
    }
    @Override
    public void draw() {
        windowToBeDecorated.draw(); //Delegation
    }
    @Override
    public String getDescription() {
        return windowToBeDecorated.getDescription(); //Delegation
    }
}

// The first concrete decorator which adds vertical scrollbar functionality
class VerticalScrollBarDecorator extends WindowDecorator {
    public VerticalScrollBarDecorator (Window windowToBeDecorated) {
        super(windowToBeDecorated);
    }

    @Override
    public void draw() {
        super.draw();
        drawVerticalScrollBar();
    }

    private void drawVerticalScrollBar() {
        // Draw the vertical scrollbar
    }

    @Override
    public String getDescription() {
        return super.getDescription() + ", including vertical scrollbars";
    }
}
在您的例子中,装饰器将被称为
diggerdecotor
,而具体的装饰器可以被称为
OverclockDecorator
RecoverDurabilityDecorator

实例化完全修饰对象的代码可能如下所示:

Digger decoratedDigger = new OverclockDecorator(new RecoverDurabilityDecorator(new SimpleDigger()));

如您所见,此解决方案仍然使用继承,但单个功能可以“混合使用”根据需要。

谢谢你的回答。我没有学习抽象类。所以我想我只是使用了图表的第一张图片。我想知道我是否使用了第一张图片。我是否使用了继承错误?还有关于装饰器模式的问题。如果我使用该模式,将有digger类、simple digger类和d类igger decorator类、overclock digger类和durablity digger dlass。对吗?digger将是一个接口,其他将是类,DiggerDecorator是一个抽象类。要回答您关于是否错误使用继承性的问题,它看起来像是一个
DurabilityRecover
类,不一定需要
过锁挖掘器的子类,这不符合单一责任原则。在我看来,这可以通过混合功能来克服。这有帮助吗?嗨,欢迎来到StackOverflow!请回答您的问题以澄清您的具体问题,或添加其他详细信息以突出您需要的内容预计起飞时间。