Подтвердить что ты не робот

Почему "extends" предшествует "реализациям" в объявлении класса

Почему implement всегда должна быть написана после extend в объявлении класса? Например:

public class Register extends ActionSupport implements ModelDriven

Почему это не может быть:

public class Register implements ModelDriven extends ActionSupport 

Последний выдает ошибку во время компиляции.

4b9b3361

Ответ 1

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

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

Ответ 2

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

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