我有一个基类A,有一个方法"说"从A的构造函数调用.所有可遗漏的类使用方法"说"就像它.但其中一个类需要重新定义这种方法.这怎么可能?
当然,我可以将基本方法"说"视为抽象,但是这样,我必须在所有可遗漏的类中复制相同的方法"说".
如果我只是重新定义方法而不将基数表示为抽象,那么它就不会被调用.
public abstract class A(){
public A(){
say(); // <- wanna call this method from heritable class, if its redefined.
}
protected void say(){};
}
public class B extends A(){
public B(){
super();
}
private void say(){};
}
Run Code Online (Sandbox Code Playgroud)
public abstract class A(){
public A(){
// constructor methods
}
protected void say(){};
protected void executeSay(){
say();
}
}
public class B extends A(){
public B(){
super();
executeSay();
}
@Override
protected void say(){};
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*nik 11
首先必须弄清楚:从构造函数调用可覆盖的方法是一个众所周知的反模式.它几乎肯定会破坏你的代码,因为在子类构造函数完成之前将调用子类方法,因此将观察未初始化的对象.因此,我最好不要向您提供有关实现此反模式的Java技术的详细建议.
完成你的要求的唯一安全方法是让结构完成,然后才调用一种initialize方法.如果要initialize始终确保调用,请使构造函数非公共,并提供工厂方法.
遗憾的是,Java需要您做一些工作才能使其正常工作.