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, это просто подвешивает машину.:)
Поле, объявленное в интерфейсе, в любом случае может быть только константой, так почему это должно зависеть от того, какой экземпляр вы используете для доступа к нему?
В любом случае размещение полей в интерфейсах часто является плохим стилем дней. Интерфейс предназначен для отражения возможностей классов, реализующих его, что полностью ортогонально идее константы. Безусловно, неприятная идея использовать интерфейс только для объявления группы констант. Иногда я считаю полезным сделать так, чтобы тип интерфейса предоставлял константы, которые являются простыми реализациями - например, интерфейс фильтрации может иметь поля «ALLOW_ALL» и «ALLOW_NONE».
Почему бы не быть статическим?
Это константа, связанная с интерфейсом, а не с каким-либо его конкретным экземпляром.
Потому что вы не можете создать экземпляр интерфейса. Также не может быть тела метода для использования нестатической не конечной переменной.
Основная причина, по которой я предположение - это деталь реализации виртуальной машины / языка.
Если интерфейсу не разрешено иметь нестатические переменные, нет необходимости выделять память для интерфейса во время создания класса. Также нет необходимости в специальных механизмах именования / переименования на случай, если вы наследуете переменные с тем же именем. Единственное, что вам нужно, это какая-то таблица для вызова правильных функций при использовании интерфейса.
Короче говоря, это упрощает жизнь сопровождающего язык / виртуальную машину. Если вы действительно хотите взглянуть на множественное наследование и его подводные камни и ловушки, прочтите «Объектно-ориентированное программное обеспечение» Бертрана Мейера (2-е издание).