gpt4 book ai didi

java - 提供抽象方法的实现但限制可见性

转载 作者:搜寻专家 更新时间:2023-11-01 01:50:39 25 4
gpt4 key购买 nike

我在抽象类中有一个调用抽象方法的方法,子类必须为其提供实现。

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com