我有一些原则上类似于以下内容:
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");
}
}
我得到的错误表明,虽然该方法是从父类(super class)调用的,但它正在调用该方法的子类版本。在上面的例子中,实例化一个新的Specific 会打印出“Generic”和“Specific”,即使doStuff() 是由Generic 的构造函数调用的。
长话短说,我不想这样。如果在对象完全初始化之前调用它,子类的方法中有一些附加功能会导致问题。我怎样才能在父类(super class)的构造函数中强制它使用它自己的方法版本,而不是最专业的方法?
最佳答案
我不认为你可以在 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");
}
}
关于java - 防止方法调用使用子类的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5658240/