¿Cuándo necesitas llamar explícitamente a un constructor de superclase?

Entonces digo que tengo una subclase que extiende una superclase. ¿En qué escenarios necesito escribir explícitamente super() para ejecutar el constructor de superclase?

Estoy viendo un ejemplo en un libro sobre clases abstractas y cuando lo extienden con una subclase no abstracta, el constructor predeterminado de la subclase está en blanco y hay un comentario que dice que se llamará al constructor predeterminado de la superclase. Al mismo tiempo, también he visto casos aquí donde el problema de alguien no era explícitamente llamar a super() .

¿La distinción es llamar al constructor predeterminado / no predeterminado de la superclase del constructor predeterminado / no predeterminado de la subclase?

Nunca necesitas solo

 super(); 

Eso es lo que estará allí si no especificas nada más. Solo necesita especificar el constructor para llamar si:

  • Desea llamar a un constructor de superclase que tiene parámetros
  • Desea encadenar a otro constructor en la misma clase en lugar del constructor de la superclase

Usted afirma que:

Al mismo tiempo, también he visto casos aquí donde el problema de alguien no era explícitamente llamar a super ().

¿Podría darnos algún ejemplo? No me puedo imaginar cómo es posible …

Si no llama explícitamente a un superconstructor, se llamará al argumento less constructor (super ()). Esto significa que usted tiene que llamar a un constructor específico usted mismo si no hay un constructor alcanzable sin argumento de la superclase.

Pero a menudo uno quiere un constructor diferente, incluso si puede usar el constructor predeterminado, depende de su código.

También tenga en cuenta que si no se declara ningún constructor, el comstackdor genera un constructor predeterminado público de manera automática, pero tan pronto como escriba su propio constructor, esto ya no ocurre.

El método super() siempre se llama en constructores de subclases, incluso si no está escrito explícitamente en código.

La única vez que necesita escribirlo es si hay varios métodos super(...) en la superclase con diferentes parámetros de inicialización.