@iskateli

Почему поля касса называются интерфейсом?

Брюс Эккель в книге "Философия 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 ? Почему эти вещи называются одинаковым словом?
  • Вопрос задан
  • 107 просмотров
Решения вопроса 1
@ComodoHacker
Здесь термин "интерфейс" используется в более широком смысле:

Интерфе́йс (от англ. interface) — граница между двумя функциональными объектами, требования к которой определяются стандартом[1]; совокупность средств, методов и правил взаимодействия (управления, контроля и т. д.) между элементами системы


Поля (и методы) класса — это способ взаимодействия других частей программы с объектами — экземплярами этого класса.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Ну вот такой вот у нас, кожаных мешков, нелогичный язык.
Интерфейс - это не только то что мы объявляем ключевым словом "interface", но и совокупность из всех публичных членов класса - тн "интерфейс взаимодейсвия"
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы