如何使接口中 class 中实现的方法成为私有方法?

How to make methods that are implemented in a class from an interface be private?

我有一个接口“FlowControl”,因为它定义了 classes 应该实现的方法,以正确的顺序处理数据。现在,由于那些 classes 有一些函数可以从其他 classes 调用,我想在每个 classes 中将这些接口方法设为私有。但是这样做会导致 intellij 出错。我是 java 的初学者所以请帮助我或者有没有其他更好的方法来实现这个目标?

public interface FlowControl{
    void writeData();
}


public class CustomerInfo() implements FlowControl{
    **private** void writeData(){
        //Some functionality private to each class
    }
}

你不能。说CustomerInfo implements FlowControl字面意思就是说CustomerInfo一定有publicwriteData()方法。 拥有该方法public的唯一方法是不实现该接口。

如果您需要 CustomerInfo class 中的 FlowControl,但没有实现接口和公开方法,请将 FlowControl 设为CustomerInfo class:

public class CustomerInfo {
  private final FlowControl myFlowControl = /* implement the interface as an anonymous class/lambda */;

  // Rest of the class... use myFlowControl where you need it.
}

这是preferring composition over inheritance的例子。换句话说:现在 CustomerInfo 有一个 FlowControl (组合);不是,CustomerInfo是一个FlowControl(继承)。

正如 Andy 提到的,您不能在 Java 中执行此操作。我能想到的唯一可行的替代方法是使用抽象 class“FlowControl”,您将这些方法定义为“受保护”,并在“CustomerInfo”中扩展抽象“FlowControl”。通过这样做,这些方法将受到保护并且无法从外部获得。