¡GoConqr estrena diseño! Cuéntanos qué te parece.

Apuntes

7.4 - Usando super e this para acessar objetos e construtores

Luis Felipe Guariento Desenvolvimento de Software Concursos Públicos Portugués 12 páginas

Contenido del apunte (12)

Página 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.

Página 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.

Página 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.

Página 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.

Página 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".

Página 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);

Página 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.

Página 8

Questões

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.

Página 9

Erro de compilação, pois para que possamos chamar, no construtor da classe, outro construtor de superclasse ou da própria…

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.

Página 10

Quando chamamos sub.increment iremos chamar o método increment da superclasse passando number que é estático na…

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.

Página 11

Aqui, a variável number é herdada da superclasse. Assim que instanciamos um objeto da subclasse e como não é chamado nenhum…

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.

Página 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.

Información

Descripción
Concursos Públicos (OCAJP 8 Online Course) Desenvolvimento de Software Apunte sobre 7.4 - Usando super e this para acessar objetos e construtores, creado por Luis Felipe Guariento el 26/08/2019.
Creado por
Luis Felipe Guariento · ago 2019
Actualizado
26 ago 2019
Visitas
3
Valoración

Escríbenos

¿Sobre qué es tu mensaje?

¿Qué te parece el nuevo diseño?

¿Te gusta?