Интерфейс в 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 без какой-либо реализации. Вся идея интерфейса заключается в том, что реализация полностью предоставляется классу реализации.