2016-03-30 5 views
-4

Зачем мне нужно звонить super?Почему вызов супер() в конструкторе дочернего класса?

class Animal { 
    public Animal(String arg) { 
     System.out.println("Constructing an animal: " + arg); 
    } 
} 

class Dog extends Animal { 
    public Dog() { 
     super("From Dog constructor"); 
     System.out.println("Constructing a dog."); 
    } 
} 
+2

Поскольку компилятор не вставляет конструктор ** по умолчанию **, если вы предоставляете конструктор. Таким образом, «Animal» не имеет пустого конструктора. –

ответ

1

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

Другое дело, если какой-либо класс расширяет любой другой класс, то по умолчанию каждый конструктор дочернего класса будет вызывать свой конструктор по умолчанию для parrent, т.е. конструктор детского класса, очевидно, супер (параметр ...)

1

Если родительский конструктор не имеет аргументов, никакой причины. В противном случае вам нужен явный вызов super (...), где вы можете установить эти параметры.