Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将部分实现添加到抽象方法_Java_Oop_Design Patterns_Methods_Abstract Class - Fatal编程技术网

Java 将部分实现添加到抽象方法

Java 将部分实现添加到抽象方法,java,oop,design-patterns,methods,abstract-class,Java,Oop,Design Patterns,Methods,Abstract Class,如果实现了抽象方法,但仍然需要从子类实现,那么实现设计的最佳方法是什么。这听起来很生疏,所以我将举例说明: abstract class Foo { abstract void update(); } abstract class Bar { void update() { //Do something update_(); //Do something else } abstract void update_(

如果实现了抽象方法,但仍然需要从子类实现,那么实现设计的最佳方法是什么。这听起来很生疏,所以我将举例说明:

abstract class Foo {
    abstract void update();
}

abstract class Bar {
    void update() {
        //Do something
        update_();
        //Do something else
    }

    abstract void update_();
}
所以基本上,我想要一种在不停止传播的情况下向抽象方法添加一些实现的方法。我觉得简单地重命名该方法将创建不干净的代码


解决这个问题的最佳方法是什么?它只是重命名方法吗?还是最好完全避免这种模式?

我认为您要做的是创建。只需创建一个抽象类并实现一个主方法,该方法使用许多尚未实现(比如说抽象)的方法

Foo有许多子类不是Bar的子类,但是也有很多Bar的子类。如果我完全在Bar的子类中实现它,它将创建大量冗余代码。我在问是否有解决方案来解决这个问题。这基本上是模板方法模式,这很好。您应该为update_u方法找到一个更好的名称:一个说明该方法应该做什么的名称,并且符合标准命名约定。如果您不希望子类能够(或意外地)重写update()方法,那么它应该是final方法。您可以反过来做吗?让
useUpdate()
调用
abstract update()
?@c0der请澄清。在当前示例中,非抽象方法已经调用了抽象方法。这取决于实际的函数用例。命名很难,但当您甚至不知道类的用途(Foo?Bar?),update()方法的作用,以及doSomething()和doSomethingElse()的实际作用时,命名就更难了。假设酒吧实际上是车库,update()实际上是paintCar(),doSomething()可以选择paintingcolor(),update()可以是applyPainting(),doSomethingElse()可以是dry()。