Objeto: this

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();