Пожалуйста, объясните:Интерфейсы: Спецификация языка Java
- третья пуля точки
- 5-й линии (выделен жирным шрифтом)
- 2-й последней строке
Пожалуйста, объясните:Интерфейсы: Спецификация языка Java
Every class in Java is implicitly (or explicitly) a sub type of java.lang.Object
.
Класс Object является su perclass (§8.1.4) всех других классов.
Из-за этого вы можете вызывать любой метод, объявленный в Object
, для любой переменной любого типа класса.
String var = ...;
var.hashCode();
Это должно быть верно для interface
переменных типа, а также
SomeInterface var = ...;
var.hashCode();
По этой причине, interface
должен неявно объявить (как abstract
) этих методов, объявленных в java.lang.Object
.
Вы не можете переопределить final
метод, но интерфейс объявляет методы, которые должны быть реализованы в подтипах, так будет брошенных компиляции ошибки времени, если интерфейс объявляет метод, который объявлен как final
в java.lang.Object
.
Интерфейс может объявлять классы, интерфейсы и поля в своем теле. Если вспомогательный интерфейс объявляет имена тех, у кого есть одно и то же имя, он скрывает их. Поэтому он не наследует их.
Например,
public static void main(String[] args) throws Exception {
System.out.println(Parent.answer);
System.out.println(Child.answer);
}
interface Parent {
int answer = 42;
}
interface Child extends Parent {
int answer = 0;
}
печатает
42
0
нет никакого способа, чтобы получить значение из Child
ссылки Parent
«ы.