Pq não posso usar o super() fora do construtor? Motivo conceitual

4 respostas
jason_bourne

Pessoal,

Sei que não podemos chamar o construtor da classe pai (super()) fora do construtor da classe filha. Mas a minha pergunta é o porquê disso? existe alguma explicação baseada nos conceitos do OOP?

4 Respostas

remixlara

Quando vc chama super(), vc está chamando o construtor padrão (sem parâmetros) da superclasse, e o construtor segundo a orientação a objetos é executado quando vc instância uma classe.
logo não ha necessidade de executar este super fora de lugar nenhum a num ser no construtor da classe filha…
agora… se vc quiser acessar métodos e atributos publics da super classe vc pode fazer da seguinte forma: super.metodo(); ou super.FIELD;
lembrando que o super() apenas pode ser chamado no construtor da classe filha

ViniGodoy

E qual seria o sentido disso?
Isso seria o mesmo que chamar o construtor fora do construtor, o que também não é possível.

jason_bourne

remixlara:
Quando vc chama super(), vc está chamando o construtor padrão (sem parâmetros) da superclasse, e o construtor segundo a orientação a objetos é executado quando vc instância uma classe.
logo não ha necessidade de executar este super fora de lugar nenhum a num ser no construtor da classe filha…
agora… se vc quiser acessar métodos e atributos publics da super classe vc pode fazer da seguinte forma: super.metodo(); ou super.FIELD;
lembrando que o super() apenas pode ser chamado no construtor da classe filha

Obrigado!

renamed
eduacsp:
Pessoal,

Sei que não podemos chamar o construtor da classe pai (super()) fora do construtor da classe filha. Mas a minha pergunta é o porquê disso? existe alguma explicação baseada nos conceitos do OOP?

Você pode usar o super (e nao super()) em outro momento importante do código:

public class Tela extends JFrame {

	public static void main(String[] args) {
		new Tela();
	}
	
	public Tela(){
		super("Minha janela"); //Aqui chamo o contrutor de JFrame que recebe String
		super.setSize(200, 200); //Aqui chamo o método setSize da minha super classe. Esse super não é necessário.
		dispose(); // Se por acaso eu colocar isso aqui, chamo o dispose() da minha classe Tela()
	}
	
	public void dispose(){
		System.out.println("Tchau!"); // Faço qualquer coisa antes de dar o dispose();
		super.dispose(); /*Aqui estou chamando o dispose da minha super classe. Nesse caso, o super é necessário senão chamaríamos sempre o dispose() dessa classe até estourarmos a pilha */
	}
	
}
Criado 27 de junho de 2010
Ultima resposta 27 de jun. de 2010
Respostas 4
Participantes 4