Загадочное объяснение абстракции против интерфейса в Java-документе - PullRequest
2 голосов
/ 07 декабря 2010

В Java-документе сказано:

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

Это правильный текст?что не часть смущает меня, потому что интерфейсы не имеют полей static или final, верно?

Источник: http://download.oracle.com/javase/tutorial/java/IandI/abstract.html

Спасибо.

Редактировать:

public interface GroupedInterface extends Interface1,
                                        Interface2, Interface3 {

   // constant declarations
   double E = 2.718282;  // base of natural logarithms

   // method signatures
   void doSomething (int i, double x);
   int doSomethingElse(String s);

}

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

Ответы [ 6 ]

3 голосов
/ 07 декабря 2010

Каждая декларация поля в теле интерфейс неявно публичный, статичный и окончательный. Разрешено избыточно указать любой или все эти модификаторы для таких полей.

из раздела 9.3 Спецификации языка Java ( здесь )

2 голосов
/ 07 декабря 2010

Это правильный текст.

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

2 голосов
/ 07 декабря 2010

Нажмите " Определение интерфейса " по ссылке в вашем вопросе:

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

1 голос
/ 07 декабря 2010

Документация верна. Интерфейсы могут содержать статические конечные поля для использования в качестве констант. Абстрактные классы могут содержать переменные экземпляра, которые наследуются расширяющими классами. Эти переменные затем доступны в экземплярах расширяющихся классов.

1 голос
/ 07 декабря 2010

думаю, что ... все поля внутри интерфейса будут статическими и окончательными, даже если вы не написали статические и окончательные!

1 голос
/ 07 декабря 2010

Цитата верна. Интерфейсы могут иметь статические конечные поля, но не могут иметь никакой другой комбинации (нестатической или не финальной).

Поля в интерфейсе по умолчанию являются статическими и окончательными, добавление модификаторов не требуется, поскольку альтернативы нет.

Для абстрактного класса может иметь смысл придать ему изменяемое состояние, см. Java.util.AbstractList. Интерфейсам не разрешается иметь какого-либо члена, который бы присваивал изменяемое состояние классу, его реализующему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...