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

标签 java abstract-class visibility

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

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/

相关文章:

java - 在 weblogic 上登录 web 服务

java - 如何使用 Java 和 Spring 在 REST Web 服务中 wait()?

java - 如何在 PDFBox 2.0.0 中将 PDDocument 设置为可分页?

c++ - C++中的类接口(interface)继承

c++ - 是否可以在编译时判断一个方法是否可公开访问

java - scala 类中属性的可见性

java - 使用JAVA FTP连接远程服务器

python - Django:GenericForeignKey 和 unique_together

java - 如何从抽象类中实现的方法获取类

HTML .style 可见性 : hidden doesn't work