
this es una referencia al objeto que envia un mensaje, o simplemente, una referencia al objeto que llama a un método (este no debe ser static). Internamente está definida:
final NombreClase this;
por consiguiente no puede modificarse. Las variables y métodos de las clases están referenciados, implícitamente, por this. Pensemos, por ejemplo, en la siguiente clase:
public class Triangulo {
private double base;
private double altura;
public double area() {
return base * altura/2.0;
}
}
En el método area() se hace referencia a las variables instancia base y altura. ¿A la base, altura de qué objeto?. El método es común para todos los objetos Triangulo. Aparentemente no distingue entre un objeto u otro, sin embargo cada variable instancia implícitamente está cualificada por this. Es como si estuviera escrito:
public double area() {
return this.base * this.altura/2.0;
}
Fundamentalmente this tiene dos usos:
- Seleccionar explícitamente un miembro de una clase con el fin de dar más claridad o de evitar colisión de identificadores. Por ejemplo:
public class Triangulo {
private double base;
private double altura;
public void datosTriangulo(double base, double altura) {
this.base = base;
this.altura = altura;
}
// . . .
}
Se ha evitado con this la colisión entre argumentos y variables instancia.
- Que un método devuelva el mismo objeto que le llamó. De esa manera se pueden hacer llamadas en cascada a métodos de la misma clase. De nuevo se define la clase Triangulo:
public class Triangulo {
// …
public Triangulo visualizar() {
System.out.println(«Base = » + base);
System.out.println(«Altura = » + altura);
return this;
}
public double area() {
return base * altura/2.0;
}
}
Ahora se pueden concatenar llamadas a métodos:
Triangulo triangulo = new Triangulo();
t.datosTriangulo(15.0,12.0).visualizar();