Herança contornando o erro: Java error: Implicit super constructor is undefined.

Posted by

Está implementando herança em novas classes e esta recebendo o erro de compilação abaixo?

herança Implicit super constructor SuperClasse() is undefined. Must explicitly invoke another constructor




Esse é um erro comum, exibido a novos desenvolvedores e até mesmo aos mais experientes, quando se está implementando herança em novas classes. E pode ser facilmente resolvido, atentando para um conceito básico da construção de construtores na linguagem Java que diz:

Se um construtor não invoca explicitamente um construtor de superclasse, o compilador Java automaticamente insere uma chamada para o construtor sem argumento da superclasse. Se a superclasse não tiver um construtor sem argumentos, você receberá um erro em tempo de compilação.

Fonte: http://docs.oracle.com/javase/tutorial/java/IandI/super.html (ver nota da sessão subclass constructors)

Codificando Herança

Esse erro pode ser facilmente observado no exemplo abaixo, quando se tenta implementar a seguinte estrutura de classe com herança:

Na super classe sem problemas:

Mas na classe filha é exibido um erro de compilação, na declaração do método construtor (linha 5).

 

Esse  erro pode ser solucionado das seguintes forma:
1.  Na Subclasse, adicionar uma chamada explícita ao método com argumento(s) da SuperClasse .

 

2. Ou na SuperClasse criar um método sem argumento.

Simples assim!

E como prova da importância de entender esse conceito, esses dias estudando em um Quiz para a certificação SCJP. Me deparei com a seguinte questão, escrita exatamente como segue:

pakage com.concretepage;

class B{
public B(String s){
System.out.print(“B”);
}
}
public class A extends B{
public A(String s){
System.out.print(“A”);
}
public static void main(String[] args){
new A(“C”);
}
}

 What is the result?

a. BA
b. BC
c. BCA
d. Error in Compilation

Sabe dizer qual a questão é a correta? Pensa aê  deixe seu comentário! vlw!

 

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *