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

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]