Dúvida de conceitos em Orientação a Objeto

Por que construtores de classe pai não podem ser herdados?

Somente membros são herdados, contrutores não são membros.

Olha o que diz a especificação aqui.

The body of a class declares members (fields and methods and nested classes and interfaces), instance and static initializers, and constructors (§8.1.6).

Ou seja, tecnicamente, apenas campos, métodos, classes e interfaces aninhadas são membros.

1 curtida

Vou assumir que com a palavra “herdado” você queira dizer “sobrescrito”.

Um construtor não é um membro da classe, ele é responsável por inicializar um objeto da classe.

Você não consegue invocar o construtor como se fosse um método, o construtor é chamado através da instrução new.

O construtor não pode ser sobrescrito pois na classe filha ele tem um nome diferente da classe pai, ele tem o nome da classe filha.

Isso não significa que você não possa invocar o construtor da classe pai na classe filha.

Tenha em mente que a classe pai faz parte da classe filha, por isso que herança é um acoplamento forte.

A primeira coisa que um objeto da classe filha precisa fazer ao ser instanciado, é ter certeza de que seus atributos pertencentes à classe pai, estejam devidamente inicializados.

Por isso a chamada ao construtor da classe pai é a primeira instrução que é executada pelo construtor da classe filha.

Nos construtores sem parâmetro, o Java faz isso implicitamente, mas você pode fazer de forma explícita através da instrução super().

Nos construtores com parâmetros, o Java te obriga a usar explicitamente a instrução super(parametro), já que o compilador não tem como adivinhar o que você quer passar como parâmetro de inicialização do objeto da classe pai.

1 curtida