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ê.
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ê.
O que a mensagem de erro diz? [=
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?
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

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

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
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.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. [=
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)