繁体   English   中英

如何阻止子级的调用覆盖方法

[英]How to block call overridden method from Child

例如,我有两个班。

public class PActivity {
...
    @Override
    public boolean OnEventSocket(PMSocketEvent a_iEvent)
        ...
        handled = OnEventSocket(...);
    }
}

第二类:

public class PMenu extends PActivity {
    @Override
    public boolean OnEventSocket(PMSocketEvent a_iEvent)
    {
        ...
    }
}

如何阻止第二类的调用方法?

有时我想从基类中调用方法OnEventSocket

我有很多类似PMenu类,所以我必须在PActivity进行更改

我将使用一种模板方法模式

本质上,您没有覆盖可覆盖的公共方法,而是覆盖了由公共方法调用的受保护方法。 这使您可以在调用覆盖的方法之前进行所需的任何检查。

public class PActivity {
...
    public final boolean onEventSocket(args)
    {
        if (method_should_be_called)
        {
            eventSocketImpl(args);
        }
    }

    protected boolean eventSocketImpl(args)
    {
        // default behaviour
    }
}

public class PMenu extends PActivity {
    @Override
    protected boolean eventSocketImpl(args)
    {
        // overridden behaviour
    }
}

您应该能够在不更改任何PMenu实现的情况下完成这项工作,但有两个缺点:

  • 您将有一个应该受到保护的公共方法
  • 您将必须保持当前方法的名称不变,这可能会造成混淆。

暂无
暂无

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

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