使用子类的方法阻止方法调用

mac*_*tic 2 java methods subclass

我有一些原则上类似于以下内容的东西:

public class Generic {

    public Generic(){
        doStuff();
    }

    protected void doStuff(){
        System.out.println("Generic");
    }

}

public class Specific extends Generic {

    public Specific(){
        super();
    }

    protected void doStuff(){
        super.doStuff();
        System.out.println("Specific");
    }

}
Run Code Online (Sandbox Code Playgroud)

我得到的错误表明,虽然该方法是从超类调用的,但它调用的是子类的方法版本.在上面的例子中,实例化一个新的Specific将打印出"Generic"和"Specific",即使doStuff()是由Generic的构造函数调用的.

长话短说,我不想那样.在子类的方法中有一些附加功能,如果在对象完全初始化之前调用它,则会导致问题.我怎样才能在超类的构造函数中强制它使用自己的方法版本,而不是最专业的?

jwi*_*mar 5

我不认为你可以在Java中有一个A)可以被覆盖的函数,而B)在调用时不会表现多态.我建议你做这样的事情来模拟你所问的行为:

public class Generic {

    public Generic(){
        doGenericStuff();
    }

    private final void doGenericStuff() {
        System.out.println("Generic");
    }

    protected doStuff(){
        doGenericStuff();
    }

}

public class Specific extends Generic {

    public Specific(){
        super();
    }

    protected doStuff(){
        super.doStuff();
        System.out.println("Specific");
    }

}
Run Code Online (Sandbox Code Playgroud)