繁体   English   中英

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

[英]How to prevent abstract method from being called?

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

public abstract class BaseFwkPageController extends PageControllerSupport {

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

    public abstract void loadData();

    // ...
}

现在,我不希望在子子类(子类)中调用此loadData()方法。 我不能改变超级班。 我该如何实现?

重写该方法,并将新行为赋予子类。 你可以

@Override 
public void loadData() {
    // do nothing.
}

您无法隐藏该方法,降低其可见性或阻止任何人调用。

但是,您可以在子类中执行以下操作:

@Override
public void loadData() {
  throw new UnsupportedOperationException("not supported");
}

或者,您可以放置​​一个interface ,仅公开通过该接口可以调用的内容。

Interface interface = new Implementation();
interface.callMethod();

这样,您将拥有完全的控制权。

您不能阻止在子级中调用该方法,因为该方法是公共的。 您可以将每个方法调用都计入一个私有实例变量中,并抛出一个异常,如果该异常已被多次调用(或您期望的调用次数)。

此外,您需要将该方法标记为final方法,以便子级无法覆盖此方法并更改行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM