如何使接口中 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”。通过这样做,这些方法将受到保护并且无法从外部获得。
我有一个接口“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”。通过这样做,这些方法将受到保护并且无法从外部获得。