如何防止抽象方法被调用?

时间:2012-02-13 08:30:58

标签: java jsf

我有一个超级(祖父母)抽象bean类,在loadData()方法中调用init()方法,如下所示:

public abstract class BaseFwkPageController extends PageControllerSupport {

    public String init(){
        cleanSession();
        loadData();
        return initNavigation;
    }

    public abstract void loadData();

    // ...
}

现在我不希望在子子类(子)中调用此loadData()方法。我不能改变超级班。我怎样才能做到这一点?

3 个答案:

答案 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,以便子项无法覆盖此方法并更改行为。