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