【发布时间】:2019-04-12 14:51:46
【问题描述】:
我在使用我在我的界面中实现的私有方法时遇到了问题。
我在我的RequestData 接口中私下实现了一个print(string, list) 方法,以隐藏实现,因为我不希望它被调用,除非由类的其他打印方法调用 - 但我将它包含在接口中,因为它正在运行与每个实现类相同。
问题是,当我尝试从实现RequestData 接口的FundingRequests 中使用print 方法时,它会显示错误-print 方法在RequestData 接口中的访问是私有的,所以找不到。
嗯...如果接口的私有方法无法从实现类中访问,您应该如何使用它们?
这是一个错误,还是我误解了接口?
界面:
package com.landbay.datamodel.data;
import java.util.List;
public interface RequestData<E> {
void add(E newRequest);
List<E> getRequests();
List<E> getFulfilledRequests();
List<E> getUnfulfilledRequests();
void printRequests();
void printFulfilledRequests();
void printUnfulfilledRequests();
private void print(String listTitle, List<E> listToPrint) {
StringBuilder string = new StringBuilder();
string.append(listTitle);
for (E request : listToPrint) {
string.append("\n").append(request);
}
System.out.println(string);
}
}
违规类和方法:
public class FundingRequests implements RequestData<FundingRequest> {
private TreeSet<FundingRequest> requests;
FundingRequests() {
this.requests = new TreeSet<>();
}
...
@Override
public void printRequests() {
print("",new ArrayList<>(requests));
}
}
【问题讨论】:
-
接口中的私有方法并不意味着被实现类使用,事实上不能使用
private。添加它们是为了更容易实现static和default接口方法。 -
@Slaw's on it,私有方法用于类内,受保护的(默认范围)成员对子类可见,如果您想对外部类可见,则需要公共范围.
-
@Slaw 好的,这很有趣 - 谢谢。
标签: java oop interface private access-modifiers