我有一个超级(祖父母)抽象bean类,在loadData()
方法中调用init()
方法,如下所示:
public abstract class BaseFwkPageController extends PageControllerSupport {
public String init(){
cleanSession();
loadData();
return initNavigation;
}
public abstract void loadData();
// ...
}
现在我不希望在子子类(子)中调用此loadData()
方法。我不能改变超级班。我怎样才能做到这一点?
答案 0 :(得分:2)
重写方法并将新行为提供给子类。你可以
@Override
public void loadData() {
// do nothing.
}
答案 1 :(得分:2)
您无法隐藏该方法,降低其可见性或阻止任何人调用。
但是你可以在你的子类中做这样的事情:
@Override
public void loadData() {
throw new UnsupportedOperationException("not supported");
}
或者,您可以输入interface
,仅显示可通过界面调用的内容。
Interface interface = new Implementation();
interface.callMethod();
这样你就可以完全控制。
答案 2 :(得分:0)
您无法阻止在子项中调用该方法,因为该方法是公开的。您可以对私有实例变量中的每个方法调用进行计数,如果多次调用(或者您期望多少次),则抛出异常。
此外,您需要将方法标记为final
,以便子项无法覆盖此方法并更改行为。