如何阻止来自Child的调用重写方法

时间:2017-04-04 13:50:00

标签: java events block extends

例如,我有两个班级。

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

进行更改

1 个答案:

答案 0 :(得分:0)

我会使用一种template method pattern

基本上,您可以覆盖由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实现的情况下完成这项工作,但有两个缺点:

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