05 септември 2014 21:18последните два случая не са съвсем правилни:
- ако родителският клас има конструктор с параметри, то дъщерният трябва да има изричен конструктор (със или без параметри - няма значение) - основното е, че той ясно показва как трябва да се инициализира родителският клас с помощта на извикването на super.
Не се опитвайте да го запомните като някаква „мантра“. Ето основната точка, която трябва да разберете:
- конструкторът е необходим, за да се извърши някаква инициализация на този клас, да се зададат някои от полетата му или нещо друго; - ако не се изисква специална инициализация, тогава имплицитният конструктор по подразбиране все още присъства, ефектът му е абсолютно същият като от публичен конструктор без параметри, който не прави нищо (все още инициализира нещо там - ще го разглеждаме така); - когато класовете се наследяват, се оказва, че полученият клас наследява всички свойства от всички предшественици s и всички тези свойства трябва да бъдат предадени инициализирани; - следователно Java машината изисква всички конструктори на всички класове, от които е съставен този потомък, да бъдат извикани "по веригата"; - ако конструктори без параметри участват във веригата, тогава Javaсамата машина разбира как да ги извика. не е необходимо да им се предава нищо и следователно е невъзможно да бъдат извикани "неправилно"; - обаче, ако някои от конструкторите изискват параметри, тогава тези параметри трябва да бъдат зададени изрично - ако това е последният конструктор във веригата, тогава потребителят ще зададе параметрите за него, когато бъде извикан - и ако не е последният, тогава конструкторът-потомък трябва да зададе параметрите за него.