2016-04-05 6 views
0

У меня есть интерфейс и 2 класса, которые реализуют этот интерфейс. См. Приведенный ниже код.Защищенный метод в интерфейсе

addAchievedMilestone - это метод, который необходимо реализовать в каждом классе, но может выполняться только классом в одном пакете.

Почему не может быть защищен метод addAchievedMilestone?

Я хочу, чтобы он был защищен, поэтому его можно использовать только в классах в одном пакете. (Этот метод не будет распространен никаким другим классом)

Но модификатор в Project-классе всегда должен быть общедоступным, как я могу это решить?

Пример кода:

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

в коде класс проекта не реализует MilestoneAchievable интерфейс – zeugor

+0

Забыл, что теперь это :) – Programmer1994

ответ

2

Любой метод, объявленный в интерфейсе является открытой. И подкласс не может уменьшить видимость/доступ метода. См. Why can't you reduce the visibility of a method in a Java subclass? для получения более подробной информации.

+0

Проект не имеет подкласса. Защищенный используется только для достижения того, что только классы в одном пакете могут выполнять этот метод. – Programmer1994

+1

Что Yogesh_D говорит, что 'Project' * является * подклассом. Это подкласс «MilestoneAchievable» и что он не может уменьшить видимость от публичного до частного. Как вы можете видеть в [этой таблице] (http://stackoverflow.com/a/33627846/276052), это действительно будет уменьшение видимости. – aioobe

1

Просто не сделать свой интерфейс общественного

или, вернее, сделать 2 интерфейса:

Публичный один

public interface MilestoneAchievable { 
    public Milestone getMaxMilestone(); 
} 

пакет, один

interface MilestoneAchievableProt extends MilestoneAchievable { 
    void addAchievedMilestone(Milestone m) throws Exception; 
} 
+0

Я получаю сообщение об ошибке, что модификатор реализованного метода addAchievedMilestone должен быть общедоступным ... – Programmer1994

+0

У меня его нет ^^ может быть различие в нашей версии java? Кстати, публикация его ничего не изменит: ваш интерфейс по-прежнему будет ограниченным пакетом :) –

 Смежные вопросы

  • Нет связанных вопросов^_^