Notizen
7.4 - Usando super e this para acessar objetos e construtores
Inhalt der Notizen (12)
Seite 1
A palavra-chave this
A palavra-chave this é utilizada dentro de um método de instância ou dentro de um construtor para se referir ao objeto corrente - o objeto cujo método ou construtor está sendo chamado.
Você pode se referir a qualquer membro ( variável de instância ou método de instância) do objeto corrente de dentro de um método de instância ou construtor utilizando-se this.
Seite 2
Utilizando this para se referir a campos e métodos
public class MyClass{
private String field = "Instance field";
public void print(String string){
System.out.println(String);
}
public void execute(){
String field = "Local variable";
this.print(this.field);
}
}
A palavra-chave this acima é utilizada no método de instância execute.
O código this.print(this.field); -> passa o valor do campo de instância field para o método de instância print.
Notar que o campo de instância field sofre shadowing no método de instância execute por uma variável local de mesmo nome. A palavra-chave this nos ajuda a transpassar o shadowing, pois se removermos a palavra-chave this, ficando o comando assim: this.print(field); - > o valor da variável local será passado ao método print ao invés do valor da variável de instância.
Seite 3
Usando this
public class Person{
private String name;
public Person(){
this("NoName");
}
public Person(String name){
this.name = name;
}
}
De dentro de um construtor, podemos utilizar a palavra-chave this de modo a chamar outro construtor dessa mesma classe. No cenário passado acima, o comando a seguir: this("NoName"); -> será utilizado para chamar o construtor com argumento String mais abaixo. Então toda vez que for utilizado o construtor padrão sem argumentos ao se instanciar determinado objeto Person, o construtor com argumento String será chamado e será passado o valor "NoName" para o construtor com argumento que irá gravar na variável de instância name o valor passado como argumento.
Seite 4
A palavra chave super
A palavra-chave super será utilizada dentro de um método de instância ou dentro de um construtor da subclasse para acessar membros de sua superclasse direta.
Seite 5
Acessando membros da superclasse
public class SuperClass{
protected String string="SuperClass";
protected void print(String string){
System.out.println(string + "SuperClass");
}
}
public void SubClass extends SuperClass{
public String string = "SubClass";
public void print(String string){
System.out.println(string + "SubClass");
}
public void execute(){
super.print(super.string);
}
}
A palavra primeira ocorrência de super em super.print(super.string); é utilizada para chamar o método print da superclasse direta de SubClass. E a palavra-chave super em super.string será utilizada para chamar a variável de instância string na superclasse cujo valor será passado via método print. Caso removessemos a palavra-chave super deixando o comando como "print(string)", seria como se referissemos a chamada como this.print(this.string), chamamos o método print sobrescrito por SubClass e a variável de instância string do tipo String cujo valor inicial na SubClass é "SubClass".
Seite 6
Chamando construtores da superclasse
public class SuperClass{
protected String string;
protected SuperClass(){
this.string="SuperClass field";
}
}
public class SubClass extends SuperClass{
public SubClass(){
super();
System.out.println(string);
}
}
Aqui utilizamos a palavra-chave super() de modo a chamar o construtor sem argumentos da superclasse, que fará com que a variável string receba o valor "SuperClass field". Será esse o valor impresso da variável na chamada a System.out.println(string);
Seite 7
Lembrete
Dentro de um construtor, a chamada de outro construtor, seja da mesma classe ou de sua superclasse, deve sempre ser na primeira sentença.
Caso um construtor não chame explicitamente outro construtor, o compilador irá automaticamente inserir uma chamada ao construtor sem argumentos da superclasse.
Seite 8
Questões
A variável number é uma variável de instância, então somente pode ser acessada diretamente por método de instância da mesma classe. Em um método estático, precisaremos de uma referência para poder acessá-la. Além disso a palavra-chave this somente pode ser usada ou num construtor ou em um método de instância da classe, o que não acontece aqui.
A. Compilation fails.
Seite 9
Erro de compilação, pois para que possamos chamar, no construtor da classe, outro construtor de superclasse ou da própria classe, essa chamada deverá ser a primeira chamada no construtor, o que não acontece aqui. Resposta A. Compilation fails.
Seite 10
Quando chamamos sub.increment iremos chamar o método increment da superclasse passando number que é estático na superclasse. Na superclasse, number inicia com 0 e a chamada irá incrementar esse valor em uma unidade. Entretanto a variável de instância number na subclasse nada tem haver com a variável estática number na superclasse. Aqui a variável de instância number na subclasse inicia com 2. Assim, sub.number imprimirá 2 e não 1.
Resposta C. It prints number 2.
Seite 11
Aqui, a variável number é herdada da superclasse. Assim que instanciamos um objeto da subclasse e como não é chamado nenhum outro construtor, o compilador irá automaticamente adicionar uma chamada ao construtor da superclasse de Sub, que irá incrementar o campo number em uma unidade. Posteriormente o construtor de sub irá através da referência this, se referir a variável number herdada da superclasse, que agora tem valor 1, modificando-a fazendo 1*2, passando number a ter valor 2, resposta C.
Seite 12
Resumo
A palavra-chave this é utilizada dentro de um método de instância ou de um construtor para se referir ao objeto corrente - o objeto cujo método ou construtor foi chamado.
A palavra-chave super pode ser utilizada dentro de um método de instância ou em um construtor da subclasse de modo a acessar membros de sua superclasse direta.
Dentro de um construtor, a chamada de outro construtor, seja da mesma classe ou de sua superclasse, deve sempre ser na primeira sentença.
Caso um construtor não chame explicitamente outro construtor, o compilador irá automaticamente inserir uma chamada ao construtor sem argumentos da superclasse.
Informationen
- Beschreibung
- Concursos Públicos Desenvolvimento de Software (OCAJP 8 Online Course) Notiz am 7.4 - Usando super e this para acessar objetos e construtores, erstellt von Luis Felipe Guariento am 26/08/2019.
- Erstellt von
- Luis Felipe Guariento · Aug 2019
- Aktualisiert
- 26 Aug 2019
- Aufrufe
- 3
- Bewertung