Интерфейс в Java может иметь один и только один модификатор, который является открытым. Почему остальные не разрешены?

Возможный дубликат:
Защищено в интерфейсах

Следующий фрагмент кода показывает, что интерфейс в Java может иметь только один модификатор, который является открытым. Никакие другие модификаторы (частные и защищенные) не допускаются в интерфейсе ни с полями, ни с какими-либо методами. Очевидно, что среди модификаторов частное не имеет смысла использовать в интерфейсе, но защищенное должно быть разрешено в интерфейсе, потому что оно может быть включено его реализующим классом.

interface Demo
{
    private final static int a=10; //Will not be compiled.
    protected final static int b=20; //Will not be compiled.
    public final static int x=0;   //ok

    abstract public void showSum();
}

в то время как абстрактный класс может иметь все модификаторы private, public и protected. Мой вопрос только в том, что защищенный модификатор не разрешен в интерфейсе, который, как мне кажется, разрешен. Зачем?

3 ответа

Решение

Очевидно, что лучший ответ - "потому что так они это определили". Я не думаю, что я слишком внимательно посмотрел бы на обоснование решений, принятых при первоначальном определении Java; это было давно, сейчас, и опыт, полученный при использовании языка, показал, что многие из этих первоначальных решений были ошибочными.

В этом случае интерфейс предназначен для использования в качестве общедоступного протокола для связи с объектом, и поэтому было решено, что все члены должны быть публичными. Возможно, это не самое лучшее или самое полезное определение, но оно у нас есть, и мы должны жить с этим.

Все методы и поля в interface должны быть объявлены таким образом, чтобы они могли быть вызваны из любого места. Не только из подкласса.

Только public модификатор может сделать это.

Однако следует избегать наличия поля в интерфейсе. если возможно.

Абстрактный класс предоставляет некоторую реализацию, которую наследуют подклассы.

Интерфейс просто определяет внешний API без какой-либо реализации. Вся идея интерфейса заключается в том, что реализация полностью предоставляется классу реализации.

Другие вопросы по тегам