Impressão da referência implícita super

8 respostas
dntalemao

Galera, por que não posso fazer isso:

System.out.println(super);

//já isso é permitido

System.out.println(this);

Não tem aplicação prática, só queria saber o porquê.

8 Respostas

Hebert_Coelho

O que a mensagem de erro diz? [=

Rodrigo_Sasaki

Bom, isso é um conceito que pode ser meio confuso.

A palavra reservada super é utilizada para acessar membros da classe superior, utilizando ela você pode definir que quer invocar o método da super classe, e não o da classe atual (caso ambos tenham o mesmo nome).

Agora você fez uma pergunta interessante, porque podemos imprimir this e não super? Parece ser uma coisa óbvia, não? Deveria funcionar.

A diferença é que this guarda a referência da instância do objeto atual, e super só indica que você está acessando algo da classe superior. Se você instancia uma subclasse, não haverá na memória uma instância da classe superior, portanto não teria o que imprimir.

Deu pra entender?

asousaj

Se mesmo com a explicação do Sasaki, ainda quiser printar super faz assim:

System.out.println(super.toString());
//Que obviamente teremos o mesmo resultado de:
System.out.println(this);
//Afinal super é referencia a uma classe superior mas em termos de objeto temos apenas 1

:smiley:

Rodrigo_Sasaki

asousaj:
Se mesmo com a explicação do Sasaki, ainda quiser printar super faz assim:

System.out.println(super.toString());
//Que obviamente teremos o mesmo resultado de:
System.out.println(this);
//Afinal super é referencia a uma classe superior mas em termos de objeto temos apenas 1

:D


Com isso podemos ter resultados diferentes, caso o toString na classe atual esteja sobrescrito, mas como está no comentário do código, ainda temos somente 1 objeto. :slight_smile:

dntalemao

Rodrigo Sasaki:
Bom, isso é um conceito que pode ser meio confuso.

A palavra reservada super é utilizada para acessar membros da classe superior, utilizando ela você pode definir que quer invocar o método da super classe, e não o da classe atual (caso ambos tenham o mesmo nome).

Agora você fez uma pergunta interessante, porque podemos imprimir this e não super? Parece ser uma coisa óbvia, não? Deveria funcionar.

A diferença é que this guarda a referência da instância do objeto atual, e super só indica que você está acessando algo da classe superior. Se você instancia uma subclasse, não haverá na memória uma instância da classe superior, portanto não teria o que imprimir.

Deu pra entender?

Deu sim.
Porém reparei também que quando temos uma superclasse que definiu um atributo, a sua subclasse pode acessar esse atributo através do this ou do super, nesse caso tanto faz, isso gera um pouco de confusão para mim.
Nesse caso como nos outros o super não teria muita utilidade, já que há apenas uma referência para o objeto, a única vantagem que vejo é quando há ambiguidade nos atributos da superclasse e na subclasse.

Obrigado

Rodrigo_Sasaki

dntalemao:
Deu sim.
Porém reparei também que quando temos uma superclasse que definiu um atributo, a sua subclasse pode acessar esse atributo através do this ou do super, nesse caso tanto faz, isso gera um pouco de confusão para mim.
Nesse caso como nos outros o super não teria muita utilidade, já que há apenas uma referência para o objeto, a única vantagem que vejo é quando há ambiguidade nos atributos da superclasse e na subclasse.

Obrigado


O super não é muito utilizado, mas esta é a utilidade dele, e dependendo da situação, saber bem o que ele faz pode resolver o seu problema.

Hebert_Coelho

Rodrigo Sasaki:
O super não é muito utilizado, mas esta é a utilidade dele, e dependendo da situação, saber bem o que ele faz pode resolver o seu problema.
Eu acabo por utiliza-lo quando tenho herança e um método sobrescrito. Para indicar para o Java qual classe chamar.

Eu já vi o super ser uma boa prática quando a aplicação tem muitas pessoas iniciantes. Com o super a pessoa pode perceber que o método não se encontra na classe atual. [=

dntalemao

Hebert Coelho:
Rodrigo Sasaki:
O super não é muito utilizado, mas esta é a utilidade dele, e dependendo da situação, saber bem o que ele faz pode resolver o seu problema.
Eu acabo por utiliza-lo quando tenho herança e um método sobrescrito. Para indicar para o Java qual classe chamar.

Eu já vi o super ser uma boa prática quando a aplicação tem muitas pessoas iniciantes. Com o super a pessoa pode perceber que o método não se encontra na classe atual. [=

Pois é, para fins didáticos é ideal.
Valeu pessoal 8)

Criado 9 de novembro de 2012
Ultima resposta 9 de nov. de 2012
Respostas 8
Participantes 4