我有一个接口和2个实现此接口的类。请参阅以下代码作为示例。
addAchievedMilestone是一个需要在每个类中实现的方法,但只能由同一个包中的类执行。
为什么addAchievedMilestone方法不受保护?
我希望它受到保护,因此它只能由同一个包中的类使用。 (该方法不会被任何其他类扩展)
但Project-class中的修饰符总是需要公开,我该如何解决?
示例代码:
package Base;
public interface MilestoneAchievable {
public Milestone getMaxMilestone();
void addAchievedMilestone(Milestone m) throws Exception;
}
项目类:
package Base;
public class Project implements MilestoneAchievable{
public Milestone getMaxMilestone() {
//implementation goes here
}
public void addAchievedMilestone(Milestone m) throws Exception
{
//implementation goes here
}
}
答案 0 :(得分:3)
接口中声明的任何方法都是公共的。 子类不能降低方法的可见性/访问权限。 见Why can't you reduce the visibility of a method in a Java subclass? 详情。
答案 1 :(得分:1)
不要公开你的界面
或者更确切地说是2个接口:
公众
public interface MilestoneAchievable {
public Milestone getMaxMilestone();
}
一个包
interface MilestoneAchievableProt extends MilestoneAchievable {
void addAchievedMilestone(Milestone m) throws Exception;
}