Брюс Эккель в книге "Философия Java", в нескольких местах называет поля класса интерфейсом:
(стр.238-239)
//:polymorphism/music/Music.java
//Объекты Note для использования с Instrument.
package polymorphism.music;
publicenumNote{
MIDDLE_C, C_SHARP, B_FLAT; //И т.д.
}
В следующем примере Wind является частным случаем инструмента (instrument) , по
этому класс Wind наследует от Instrument:
//:polymorphism/music/Instrument.java
package polymorphism.music;
import staticnet.mindview.util.Print.*;
class Instrument{
public void play(Note n){
print("Instrument.play()");
}
}
///:~
//:polymorphism/music/Wind.java
package polymorphism.music;
//Объекты Wind также являются объектами Instrument,
//поскольку имеют тот же интерфейс:
public class Windextends Instrument{
//Переопределение метода интерфейса:
public void play(Note n){
System.out.println("Wind.play()"+n);
}
}
//:polymorphism/music/Music.java
//Наследование и восходящее преобразование
package polymorphism.music;
public class Music{
public static void tune(Instrument i){
//...
i.play(Note.MIDDLE_C);
}
public static void main(String[] args){
Wind flute = new Wind();
tune(flute);//Восходящеепреобразование
}
} /*Output:
Wind.play() MIDDLE_C
*///:~
Метод Music.tune( ) получает ссылку на Instrument, но последняя также может указывать на объект любого класса, производного от Instrument. В методе main( ) ссылка на объект wind передается методу tune ( ) без явных преобразований. Это нормально; интерфейс класса Instrument должен существовать и в классе Wind, поскольку последний был унаследован от Instrument. Восходящее преобразование от Wind к Instrument способно «сузить» этот интерфейс, но не сделает его «меньше», чем полный интерфейс класса Instrument.
(стр.244)
Базовый класс Shape устанавливает общий интерфейс для всех классов, производных от Shape, — то есть любую фигуру можно нарисовать ( draw( ) ) и стереть ( erase( ) ) . Производные классы переопределяют этот интерфейс, чтобы реализовать уникальное поведение для каждой конкретной фигуры.
(стр.260-261)
Впрочем, мы знаем, что восходящее преобразование абсолютно безопасно; базовый класс не может иметь «больший» интерфейс, чем производный класс, и поэтому любое сообщение, посланное базовому классу, гарантированно дойдет до получателя.
....
Полиморфизм означает «многообразие форм». В объектно-ориентированном программировании базовый класс предоставляет общий интерфейс, а различные версии динамически связываемых методов — разные формы использования интерфейса.
Почему автор называет поля класса интерфейсом и чем тогда это отличается от другого определения интерфейса, использующего служебное слово
interface
? Почему эти вещи называются одинаковым словом?