Переменные в интерфейсе

Forth:

: a 1 recurse ; a

Внутренняя часть gforth интерпретатор:

: a 1 recurse ; a 
*the terminal*:1: Return stack overflow
: a 1 recurse ; a
                ^
Backtrace:

На Power Mac G4 при Открыть подсказке Firmware, это просто подвешивает машину.:)

11
задан Not a bug 31 January 2014 в 09:24
поделиться

4 ответа

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

В любом случае размещение полей в интерфейсах часто является плохим стилем дней. Интерфейс предназначен для отражения возможностей классов, реализующих его, что полностью ортогонально идее константы. Безусловно, неприятная идея использовать интерфейс только для объявления группы констант. Иногда я считаю полезным сделать так, чтобы тип интерфейса предоставлял константы, которые являются простыми реализациями - например, интерфейс фильтрации может иметь поля «ALLOW_ALL» и «ALLOW_NONE».

21
ответ дан 3 December 2019 в 02:02
поделиться

Почему бы не быть статическим?

Это константа, связанная с интерфейсом, а не с каким-либо его конкретным экземпляром.

3
ответ дан 3 December 2019 в 02:02
поделиться

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

6
ответ дан 3 December 2019 в 02:02
поделиться

Основная причина, по которой я предположение - это деталь реализации виртуальной машины / языка.

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

Короче говоря, это упрощает жизнь сопровождающего язык / виртуальную машину. Если вы действительно хотите взглянуть на множественное наследование и его подводные камни и ловушки, прочтите «Объектно-ориентированное программное обеспечение» Бертрана Мейера (2-е издание).

3
ответ дан 3 December 2019 в 02:02
поделиться
Другие вопросы по тегам:

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