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.

=== Known Limitations

* False negatives: some issues are not raised if the base class is not defined in the same file as the current class.


== Noncompliant Code Example

----
class Dog extends Animal {
  constructor(name) {
    super();
    this.name = name;
    super();         // Noncompliant
    super.doSomething();
  }
}
----


== Compliant Solution

----
class Dog extends Animal {
  constructor(name) {
    super();
    this.name = name;
    super.doSomething();
  }
}
----



ifdef::rspecator-view[]
== Comments And Links
(visible only on this page)

include::comments-and-links.adoc[]
endif::rspecator-view[]
