Java-компилятор не собирается входить в бесконечный цикл при попытке войти в циклическую цепочку наследования.В конце концов, каждая цепочка наследования является в конечном итоге конечным графом (и, с вычислительной точки зрения, с очень небольшим числом узлов и ребер.) Точнее, граф наследования от подкласса A к (возможному) суперклассу Z должен быть строкой (а ненаоборот), и компилятор может легко определить, является ли это строкой или нет.
Программе не требуется много времени, чтобы определить, является ли такой маленький граф циклическим или нет, или если онявляется ли строка или нет, что делает компилятор.Таким образом, компилятор не входит в бесконечный цикл, и JVM никогда не исчерпывает пространство стека, так как 1) ни компилятор не работает на JVM, ни 2) JVM не запускается (так как ничего не компилируется, и компилятор никогда не вызываетв таких условиях JVM в любом случае.)
Я не знаю ни одного языка, который бы разрешал такие циклические графы наследования (но я ничего не делал, кроме Java в течение 11 лет, так что моя память о чем-то кроме Javaявляется мягким.) Кроме того, я не вижу использования такой конструкции (в моделировании или в реальной жизни).Хотя теоретически это может быть интересно.
edit
Хорошо, я запустил ваш код, и это действительно вызывает переполнение стека.Ты был прав.Мне придется сесть и по-настоящему изучить это, чтобы понять, почему компилятор допускает такую конструкцию.
Отличная находка !!!!