如何阻止从 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 方法应该受到保护
  • 您必须保持当前的方法名称不变,这可能会造成混淆。