Вопрос по java – Почему «extends» предшествует «Implements» в объявлении класса [закрыто]

38

Почему реализации всегда должны быть написаны после extends в объявлении класса, например:

<code>public class Register extends ActionSupport implements ModelDriven
</code>

Почему бы и нет

<code>public class Register implements ModelDriven extends ActionSupport 
</code>

это ошибка времени компиляции

@JohnGray: Нам не нужен еще один цирк Oracle, не так ли? Makoto
Почему бы и нет? ...... :) Eng.Fouad
Из любопытства, почему порядок имеет значение для вас? Вы пытаетесь достичь чего-то, имея другой заказ? Nathaniel Ford
Потому что такова Java. Dave Newton
... потому что это так, как это делает лексер? Makoto

Ваш Ответ

2   ответа
77

Когда компилятор Java превращает класс в байт-код, он должен сначала обратиться к родительскому классу. Это связано с тем, что базовая реализация классов должна указывать на байт-код родительского класса, который содержит соответствующие методы и поля. Затем он добавляет указатели к коду функций дочернего класса, некоторые из которых предписаны «инструментами». ключевое слово.

Поскольку родительский класс должен быть компилируемым, проще, если компилятор заранее знает, что это за класс. Кроме того, вы можете расширить только один класс, но реализовать любое количество интерфейсов. Время компиляции увеличивается, если ключевое слово extends может смешиваться с любым количеством инструкций реализации. Компиляторы хотят как можно быстрее выйти из строя, чтобы уменьшить время разработки, поэтому этот выбор логичен. Кроме того, это помогает вам ясно думать о классе по той же причине.

@NathanielFord, мы действительно? Я был сильно дезинформирован.
Я делаю все возможное. В конце концов, мы все вместе!
Боже мой, я рад, что кто-то дал конкретный ответ, а не мусор, как "потому что это - то, как Java", "... потому что именно так его предписывает лексер?". -_- Только отвлекает от сообщества.
+1 Наконец-то вменяемый ответ. Спасибо. :)
Если не следовать правилам в объявлении класса, возникает ошибка времени компиляции.
4

Возможно, чтобы упростить работу компилятора. Это просто соглашение. Нет никакой возможности иметь возможность переставлять эти вещи.

Это все равно, что спросить, почему функции Java не написаны в предзаказной записи, напримерpublic int (int a, int b)add{ return a+b; }.

Это не соглашение. Это правило синтаксиса. Соглашения, которые вы можете игнорировать, правила соблюдаются компилятором.
Что-то изC, Поскольку код читается больше, чем написанное, многословие имеет преимущества.

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