如何阻止从 Child 调用重写的方法
How to block call overridden method from Child
例如我有两个 classes.
public class PActivity {
...
@Override
public boolean OnEventSocket(PMSocketEvent a_iEvent)
...
handled = OnEventSocket(...);
}
}
第二个class:
public class PMenu extends PActivity {
@Override
public boolean OnEventSocket(PMSocketEvent a_iEvent)
{
...
}
}
如何阻止第二个 class 的调用方法?
有时我想从基础 class 调用方法 OnEventSocket
。
我有很多 class 像 PMenu
,所以我必须在 PActivity
中进行更改
我会使用一种template method pattern。
本质上,不是有一个可覆盖的 public 方法,而是覆盖一个由 public 方法调用的受保护方法。这允许您在调用被覆盖的方法之前进行任何需要的检查。
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
实现的情况下完成这项工作,但有两个缺点:
- 您将有一个 public 方法应该受到保护
- 您必须保持当前的方法名称不变,这可能会造成混淆。
例如我有两个 classes.
public class PActivity {
...
@Override
public boolean OnEventSocket(PMSocketEvent a_iEvent)
...
handled = OnEventSocket(...);
}
}
第二个class:
public class PMenu extends PActivity {
@Override
public boolean OnEventSocket(PMSocketEvent a_iEvent)
{
...
}
}
如何阻止第二个 class 的调用方法?
有时我想从基础 class 调用方法 OnEventSocket
。
我有很多 class 像 PMenu
,所以我必须在 PActivity
我会使用一种template method pattern。
本质上,不是有一个可覆盖的 public 方法,而是覆盖一个由 public 方法调用的受保护方法。这允许您在调用被覆盖的方法之前进行任何需要的检查。
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
实现的情况下完成这项工作,但有两个缺点:
- 您将有一个 public 方法应该受到保护
- 您必须保持当前的方法名称不变,这可能会造成混淆。