Java 如何阻止来自子对象的调用重写方法
例如,我有两门课Java 如何阻止来自子对象的调用重写方法,java,events,block,extends,Java,Events,Block,Extends,例如,我有两门课 public class PActivity { ... @Override public boolean OnEventSocket(PMSocketEvent a_iEvent) ... handled = OnEventSocket(...); } } 二等舱: public class PMenu extends PActivity { @Override public boolean OnEve
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
实现的情况下实现此功能,但有两个缺点:
- 您将拥有一个应该受到保护的公共方法
- 您必须保持当前方法名称不变,这可能会造成混淆
super.OnEventSocket(..)
来实现。你说的“阻止调用方法”是什么意思?你想使用子类的实例从超类调用OnEventSocket
吗?例如,我的android活动在PMenu中,但我不想从PMenu调用方法,但是从PActivity.And call方法只在PActivity类中,但我想有30个类,比如PMenu,所以我必须将名称OnEventSocket更改为eventSocketImpl everywhere?我想避免这种情况situation@asus9e这就是我最后两个要点的意思。您可以保持现在的状态,但这意味着您的“入口点”方法(mypublic
one)需要更改名称。根据调用此函数的代码中的位置,这可能比更改所有PMenu
s的工作量要大或小。好的,我理解:)谢谢:)此函数在PActivity中只调用一次