2016-04-05 4 views
0

Я увидел код ниже online, и конструктор подкласса вызывает конструктор суперкласса перед инициализацией его собственной переменной (то есть public int seatHeight) после изменения порядка инициализации, т.е. поставив seatHeight = startHeight; до super(startCadence, startSpeed, startGear);, моя IDE отображает сообщение об ошибке. Я просто задавался вопросом, в чем причина вызова конструктора суперкласса, прежде чем подкласс может инициализировать свою собственную переменную? И каковы некоторые из правил, регулирующих инициализацию суперкласса и подкласса?Почему подкласс должен вызвать конструктор суперкласса, прежде чем подкласс может инициализировать свою собственную переменную

public class MountainBike extends Bicycle { 


    public int seatHeight; 
    public MountainBike(int startHeight, int startCadence, 
         int startSpeed, int startGear) { 
     super(startCadence, startSpeed, startGear);//when change order with seatHeight = startHeight, IDE display error 
     seatHeight = startHeight; 
    } 
    public void setHeight(int newValue) { 
     seatHeight = newValue; 
    } 

} 

ответ

4

Подкласс является продолжением суперкласса и может получить доступ к любым общественным/защищенным членам/и методы упаковки в суперкласса.

Суперкласс не может получить доступ к элементам/методам подкласса, если вы не применили его к подклассу. Прямым OO, суперкласс ничего не знает о подклассе.

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

BTW, это верно на всех языках OO, с которыми я работал, уверен, что это универсальная правда.