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?
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?
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
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.
[quote=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[/quote]
Obrigado!
[quote=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?[/quote]
Você pode usar o super (e nao super()) em outro momento importante do código:
[code]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 */
}
}[/code]