Java"抽象喜欢"方法与body

Cal*_*.50 9 java methods inheritance class abstract

有以下课程:

public abstract class Super
{
    public abstract void run();
}

public class Sub1 extends Super
{
    @Override
    public void run ()
    {
        System.out.println("Method called");
        System.out.println("Sub1 called");
    }
}

public class Sub2 extends Super
{
    @Override
    public void run ()
    {
        System.out.println("Method called");
        System.out.println("Sub2 called");
    }
}
Run Code Online (Sandbox Code Playgroud)

我怎么能避免我必须编写"System.out.println("方法称为")";" 两次?

谢谢你的回答

CalibeR.50

use*_*001 14

将通用功能引入超类,并定义另一个抽象方法,子类将为其定义自己的实现.

public abstract class Super {
    public void run() {
        System.out.println("Method called");
        printMessage();
    }
    abstract void printMessage ();
}

public class Sub1 extends Super {
    @Override
    void printMessage() {
        System.out.println("Sub1 called");
    }
}

public class Sub2 extends Super {
    @Override
    void printMessage () {
        System.out.println("Sub2 called");
    }
}
Run Code Online (Sandbox Code Playgroud)

这样就可以避免重复调用超类的常用方法两次.

  • 哦,忘了保护.如果这适用于我的情况,我会试试.谢谢 (2认同)