部分实现抽象方法?

Mit*_*ver 3 java methods abstract

例如,我有许多类都需要某种方法.在这个方法中,所有这些类都需要一行代码,方法的其余部分是不同的.

我怎么能达到这样的目的:

void method(){
    everybodyDoesThisStuff;

    // more individual stuff 

    // more individual stuff
}
Run Code Online (Sandbox Code Playgroud)

抽象方法不能有一个正文,如果你不把它抽象出来,你就会覆盖该方法并丢失它.

for*_*ert 13

您应该使用"更多个别东西"抽象的方法,而不是方法本身.

// AbstractBase.java
public abstract class AbstractBase {
    public final void method() {
        everybodyDoesThisStuff();
        doIndividualStuff();
    }

    abstract void doIndividualStuff();

    private void everybodyDoesThisStuff() {
        // stuff that everybody does
    }
}

// ConcreteClass.java
public class ConcreteClass extends AbstractBase {
    void doIndividualStuff() {
         // do my individual stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 如果每次调用`method`确实完成了`everybodyDoesThisStuff()`,那么甚至可以使`method`` final`. (3认同)
  • 这称为[模板方法模式](http://www.oodesign.com/template-method-pattern.html)。 (2认同)

shm*_*sel 5

一种解决方案是要求所有子类调用super.method().问题是没有办法实际执行.另一种选择是创建一个单独的方法,在内部执行所需的行,然后调用抽象方法:

public final void method() {
    callEveryTime();
    doMethod();
}

protected abstract void doMethod();
Run Code Online (Sandbox Code Playgroud)

请注意,method()public final因此它可以被称为地方,但不覆盖,而doMethod()protected,因此它可以被覆盖,但不是所谓的包(或子类)之外.