There are situations where super() must be invoked and situations where super() cannot be invoked.
The basic rule is: a constructor in a non-derived class cannot invoke super(); a constructor in a derived class must invoke
super().
Furthermore:
- super() must be invoked before the this and super keywords can be used.
- super() must be invoked with the same number of arguments as the base class' constructor.
- super() can only be invoked in a constructor - not in any other method.
- super() cannot be invoked multiple times in the same constructor.
class Animal {
constructor() {
super(); // Noncompliant, super() cannot be invoked in a base class
}
doSomething() {
}
}
class Dog extends Animal {
constructor(name) {
this.name = name;
super.doSomething();
super(); // Noncompliant, super() must be invoked before "this" or "super" is used
}
doSomething() {
super(); // Noncompliant, super() cannot be invoked outside of a constructor
}
}
class Labrador extends Dog {
constructor(name) {
super(); // Noncompliant, super() must be invoked with one argument
}
}
class GermanShepherd extends Dog {
constructor(name) {
} // Noncompliant, super() must be invoked in constructor of derived class
}
class FilaBrasileiro extends Dog {
constructor(name) {
super(name);
super(name); // Noncompliant, super() can only be invoked once
}
}
class Animal {
constructor() {
}
doSomething() {
}
}
class Dog extends Animal {
constructor(name) {
super();
this.name = name;
super.doSomething();
}
doSomething() {
}
}
class Labrador extends Dog {
constructor(name) {
super(name);
}
}
class GermanShepherd extends Dog {
constructor(name) {
super(name);
}
}
class FilaBrasileiro extends Dog {
constructor(name) {
super(name);
}
}