{"id":3313,"date":"2018-05-01T16:08:55","date_gmt":"2018-05-01T21:08:55","guid":{"rendered":"https:\/\/www.manualjava.net\/?p=3313"},"modified":"2018-05-01T19:49:41","modified_gmt":"2018-05-02T00:49:41","slug":"objeto-this","status":"publish","type":"post","link":"https:\/\/www.manualjava.net\/?p=3313","title":{"rendered":"Objeto: this"},"content":{"rendered":"<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-3316\" src=\"https:\/\/www.manualjava.net\/wp-content\/uploads\/2018\/05\/java59.jpg\" alt=\"\" width=\"237\" height=\"111\" \/><\/p>\n<p><span style=\"color: #000000;\">this es una referencia al objeto que envia un mensaje, o simplemente, una referencia al objeto que llama a un m\u00e9todo (este no debe ser static). Internamente est\u00e1 definida:<\/span><!--more--><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0final NombreClase this;<\/span><\/p>\n<p><span style=\"color: #000000;\">por consiguiente no puede modificarse. Las variables y m\u00e9todos de las clases est\u00e1n referenciados, impl\u00edcitamente, por this. Pensemos, por ejemplo, en la siguiente clase:<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0public class Triangulo {<\/span><br \/>\n<span style=\"color: #000000;\"> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 private double base;<\/span><br \/>\n<span style=\"color: #000000;\"> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 private double altura;<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 public double area() {<\/span><br \/>\n<span style=\"color: #000000;\"> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return base * altura\/2.0;<\/span><br \/>\n<span style=\"color: #000000;\"> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<\/span><br \/>\n<span style=\"color: #000000;\"> \u00a0 \u00a0 \u00a0 \u00a0}<\/span><\/p>\n<p><span style=\"color: #000000;\">En el m\u00e9todo area() se hace referencia a las variables instancia base y altura. \u00bfA la base, altura de qu\u00e9 objeto?. El m\u00e9todo es com\u00fan para todos los objetos Triangulo. Aparentemente no distingue entre un objeto u otro, sin embargo cada variable instancia impl\u00edcitamente est\u00e1 cualificada por this. Es como si estuviera escrito:<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0public double area() {<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0return this.base * this.altura\/2.0;<\/span><br \/>\n<span style=\"color: #000000;\"> \u00a0 \u00a0 \u00a0 \u00a0}<\/span><\/p>\n<p><span style=\"color: #000000;\">Fundamentalmente this tiene dos usos:<\/span><\/p>\n<ul>\n<li><span style=\"color: #000000;\"><span style=\"color: #000000;\">Seleccionar expl\u00edcitamente un miembro de una clase con el fin de dar m\u00e1s claridad o de evitar colisi\u00f3n de identificadores. Por ejemplo:<\/span><\/span><\/li>\n<\/ul>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0public class Triangulo {<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 private double base;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 private double altura;<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 public void datosTriangulo(double base, double altura) {<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 this.base = base;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 this.altura = altura;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ . . .<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0}<\/span><\/p>\n<p><span style=\"color: #000000;\">Se ha evitado con this la colisi\u00f3n entre argumentos y variables instancia.<\/span><\/p>\n<ul>\n<li><span style=\"color: #000000;\">Que un m\u00e9todo devuelva el mismo objeto que le llam\u00f3. De esa manera se pueden hacer llamadas en cascada a m\u00e9todos de la misma clase. De nuevo se define la clase Triangulo:<\/span><\/li>\n<\/ul>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0public class Triangulo {<\/span><br \/>\n<span style=\"color: #000000;\"> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ &#8230;<\/span><br \/>\n<span style=\"color: #000000;\"> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 public Triangulo visualizar() {<\/span><br \/>\n<span style=\"color: #000000;\"> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0System.out.println(\u00abBase = \u00bb + base);<\/span><br \/>\n<span style=\"color: #000000;\"> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0System.out.println(\u00abAltura = \u00bb + altura);<\/span><br \/>\n<span style=\"color: #000000;\"> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0return this;<\/span><br \/>\n<span style=\"color: #000000;\"> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<\/span><br \/>\n<span style=\"color: #000000;\"> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 public double area() {<\/span><br \/>\n<span style=\"color: #000000;\"> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0return base * altura\/2.0;<\/span><br \/>\n<span style=\"color: #000000;\"> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<\/span><br \/>\n<span style=\"color: #000000;\"> \u00a0 \u00a0 \u00a0 \u00a0}<\/span><\/p>\n<p><span style=\"color: #000000;\">Ahora se pueden concatenar llamadas a m\u00e9todos:<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0Triangulo triangulo = new Triangulo();<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0t.datosTriangulo(15.0,12.0).visualizar();<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>this es una referencia al objeto que envia un mensaje, o simplemente, una referencia al objeto que llama a un m\u00e9todo (este no debe ser static). Internamente est\u00e1 definida:<\/p><p><a class=\"more-link btn\" href=\"https:\/\/www.manualjava.net\/?p=3313\">Seguir leyendo<\/a><\/p>\n","protected":false},"author":1,"featured_media":3316,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12],"tags":[],"_links":{"self":[{"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/posts\/3313"}],"collection":[{"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3313"}],"version-history":[{"count":20,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/posts\/3313\/revisions"}],"predecessor-version":[{"id":3337,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/posts\/3313\/revisions\/3337"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/media\/3316"}],"wp:attachment":[{"href":"https:\/\/www.manualjava.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3313"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3313"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3313"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}