我在抽象类中有一个调用抽象方法的方法,子类必须为其提供实现。
public abstract class AClass {
public void foo() {
...
fooToImplement();
...
}
// DON'T CALL THIS METHOD, ONLY PROVIDE IMPLEMENTATION!
protected abstract void fooToImplement();
}
我想确保子类不会调用 fooToImplement(),它们应该始终使用 foo() 来代替。该行为类似于“私有(private)抽象”方法,但这在 Java 中是不可能的。
还有其他选择吗?谢谢!
最佳答案
如果您不希望您的子类能够调用此方法,您可以使用策略:将方法的行为提取到接口(interface)中并将此接口(interface)的实现传递给对象。例如
IStrategy {
public void fooToImplement();
}
AClass {
public AClass(IStrategy impl) {...}
public void foo() {
...
strategy.fooToImplement();
...
}
}
委托(delegate)而不是继承。在 Java 8 中,这会更容易一些。
如果您的 IStrategy
实现需要访问对象 AClass 的数据,您可以尝试将其实现为内部类。
关于java - 提供抽象方法的实现但限制可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34353738/