{"id":3130,"date":"2018-03-22T13:16:06","date_gmt":"2018-03-22T18:16:06","guid":{"rendered":"https:\/\/www.manualjava.net\/?p=3130"},"modified":"2018-04-01T21:36:40","modified_gmt":"2018-04-02T02:36:40","slug":"clases-y-objetos-ii","status":"publish","type":"post","link":"https:\/\/www.manualjava.net\/?p=3130","title":{"rendered":"Clases y objetos II"},"content":{"rendered":"<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-3137\" src=\"https:\/\/www.manualjava.net\/wp-content\/uploads\/2018\/03\/java55.png\" alt=\"\" width=\"212\" height=\"111\" \/><\/p>\n<p><span style=\"color: #000000;\"><span style=\"color: #000000;\">Este art\u00edculo es la continuaci\u00f3n del art\u00edculo Clases y objetos I.\u00a0<\/span><a href=\"https:\/\/www.manualjava.net\/?p=3096\"><span style=\"color: #333399;\">(Ver Clases y objetos I)<\/span><\/a>\u00a0<\/span><!--more--><\/p>\n<h2><span style=\"color: #000000;\"><strong>Visibilidad de los miembros de la clase<\/strong><\/span><\/h2>\n<p><span style=\"color: #000000;\">Un principio fundamental en programaci\u00f3n orientada a objetos es la ocultaci\u00f3n de la informaci\u00f3n, que significa que no se puede acceder a determinados datos del interior de una clase por m\u00e9todos externos a la clase. El mecanismo principal para ocultar datos es ponerlos en una clase y hacerlos privados. A los datos o m\u00e9todos privados solo se puede acceder desde dentro de la clase. Por el contrario, los datos o m\u00e9todos p\u00fablicos son accesibles desde el exterior de la clase.<\/span><\/p>\n<p><span style=\"color: #000000;\">Para controlar el acceso a los miembros de la clase se utilizan tres diferentes especificadores de acceso: public, private y protected. Cada miembro de la clase est\u00e1 precedido del especificador de acceso que le corresponde.<\/span><\/p>\n<h3><strong><span style=\"color: #000000;\">Formato<\/span><\/strong><\/h3>\n<p><span style=\"color: #000000;\"><strong>\u00a0 \u00a0 \u00a0 \u00a0<\/strong>class NombreClase{<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <strong>private<\/strong> declaraci\u00f3n miembro privado;\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/ miembros privados<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <strong>protected<\/strong> declaraci\u00f3n miembro protegido;\u00a0 \u00a0 \u00a0 \u00a0 \/\/ miembros protegidos<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<strong> public<\/strong> declaraci\u00f3n miembro p\u00fablico;\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ miembros p\u00fablicos<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0}<\/span><\/p>\n<p><span style=\"color: #000000;\">El especificador public define miembros p\u00fablicos, que son aquellos a los que se puede acceder por cualquier m\u00e9todo desde fuera de la clase. A los miembros que siguen al especificador private solo se puede acceder por m\u00e9todos miembro de la misma clase. A los miembros que siguen al especificador protected se puede acceder por m\u00e9todos miembro de la misma clase o de clases derivadas, as\u00ed como por m\u00e9todos de otras clases que se encuentran en el mismo paquete. Los especificadores public, protected y private pueden aparecer en cualquier orden. Si no se especifica acceso (acceso en forma predeterminada) a un miembro de una clase, a este se puede acceder desde los m\u00e9todos de la clase y desde cualquier m\u00e9todo de las clases del paquete en que se encuentra.<\/span><\/p>\n<p><span style=\"color: #000000;\">Secciones p\u00fablica y privada de una clase.<\/span><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\" wp-image-3172 aligncenter\" src=\"https:\/\/www.manualjava.net\/wp-content\/uploads\/2018\/03\/Secciones-300x228.png\" alt=\"\" width=\"326\" height=\"247\" srcset=\"https:\/\/www.manualjava.net\/wp-content\/uploads\/2018\/03\/Secciones-300x228.png 300w, https:\/\/www.manualjava.net\/wp-content\/uploads\/2018\/03\/Secciones.png 398w\" sizes=\"(max-width: 326px) 100vw, 326px\" \/><\/p>\n<h3><span style=\"color: #000000;\"><strong>Ejemplo<\/strong><\/span><\/h3>\n<p><span style=\"color: #000000;\">Declaraci\u00f3n de la clase Foto y Marco con miembros declarados con distinta visibilidad. Ambas clases forman parte del paquete soporte.<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0package soporte;<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0class Foto {<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 private int nt;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 private char opd;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 String q;<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 public Foto(String r) {\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/constructor<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 nt = 0;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 opd = &#8216;S&#8217;;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 q = new String(r);<\/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 mtd() {. . .}<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0}<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0class Marco {<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 private double p;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 String t;<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 public Marco() {. . .}<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 public void poner() {<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Foto u = new Foto(\u00abBetty\u00bb);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 p = u.mtd();<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 t = \u00ab**\u00bb + u.q + \u00ab**\u00bb;<\/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><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-3179 aligncenter\" src=\"https:\/\/www.manualjava.net\/wp-content\/uploads\/2018\/03\/Tabla-de-visibilidad-de-acceso-300x91.png\" alt=\"\" width=\"577\" height=\"175\" srcset=\"https:\/\/www.manualjava.net\/wp-content\/uploads\/2018\/03\/Tabla-de-visibilidad-de-acceso-300x91.png 300w, https:\/\/www.manualjava.net\/wp-content\/uploads\/2018\/03\/Tabla-de-visibilidad-de-acceso.png 726w\" sizes=\"(max-width: 577px) 100vw, 577px\" \/><\/p>\n<p><span style=\"color: #000000;\">Aunque las especificaciones p\u00fablicas, privadas y protegidas pueden aparecer en cualquier orden, en Java los programadores suelen seguir ciertas reglas en el dise\u00f1o que citamos a continuaci\u00f3n, y que usted puede elegir la que considere m\u00e1s eficiente.<\/span><\/p>\n<ol>\n<li><span style=\"color: #000000;\">Poner los miembros privados primero, debido a que contiene los atributos (datos).<\/span><\/li>\n<li><span style=\"color: #000000;\">Se ponen los miembros p\u00fablicos primero debido a que los m\u00e9todos y los constructores son la interfaz del usuario de la clase.<\/span><\/li>\n<\/ol>\n<p><span style=\"color: #000000;\">En realidad, tal vez el uso m\u00e1s importante de los especificadores de acceso es implementar la ocultaci\u00f3n de la informaci\u00f3n. El principio de ocultaci\u00f3n de la informaci\u00f3n indica que toda interacci\u00f3n con un objeto se debe restringir a utilizar una interfaz bien definida que permita que los detalles de implementaci\u00f3n de los objetos sean ignorados. Por consiguiente, los datos y m\u00e9todos p\u00fablicos forman la interfaz externa del objeto, mientras que los elementos privados son los aspectos internos del objeto que no necesitan ser accesibles para usar el objeto. Los elementos de una clase sin especificador y los protected tienen las mismas propiedades que los p\u00fablicos respecto a las clases del paquete.<\/span><\/p>\n<h3><span style=\"color: #000000;\"><strong>\u00a0A recordar<\/strong><\/span><\/h3>\n<p><span style=\"color: #000000;\">El principio de encapsulamiento significa que las estructuras de datos internas utilizadas en la implementaci\u00f3n de una clase no pueden ser accesibles directamente al usuario de la clase.<\/span><\/p>\n<h2><span style=\"color: #000000;\"><strong>M\u00e9todos de una clase<\/strong><\/span><\/h2>\n<p><span style=\"color: #000000;\">Los m\u00e9todos en Java siempre son miembros de clases, no hay m\u00e9todos o funciones fuera de las clases. La implementaci\u00f3n de los m\u00e9todos se incluye dentro del cuerpo de la clase. La siguiente figura muestra la declaraci\u00f3n completa de una clase.<\/span><\/p>\n<p><span style=\"color: #000000;\">Definici\u00f3n t\u00edpica de una clase.<\/span><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\" wp-image-3219 aligncenter\" src=\"https:\/\/www.manualjava.net\/wp-content\/uploads\/2018\/03\/Definici\u00f3n-de-clase-300x131.png\" alt=\"\" width=\"524\" height=\"229\" srcset=\"https:\/\/www.manualjava.net\/wp-content\/uploads\/2018\/03\/Definici\u00f3n-de-clase-300x131.png 300w, https:\/\/www.manualjava.net\/wp-content\/uploads\/2018\/03\/Definici\u00f3n-de-clase.png 606w\" sizes=\"(max-width: 524px) 100vw, 524px\" \/><\/p>\n<h3><span style=\"color: #000000;\"><strong>Ejemplo<\/strong><\/span><\/h3>\n<p><span style=\"color: #000000;\">La clase Racional define el numerador y denominador caracter\u00edstico de un n\u00famero racional. Por cada dato se proporciona un m\u00e9todo miembro que devuelve su valor y un m\u00e9todo que asigna numerador y denominador. Tiene un constructor que inicializa un objeto a 0\/1.<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0class Racional {<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 private int numerador;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 private int denominador;<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 public Racional() {<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 numerador = 0;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 denominador = 1;<\/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 int leerNumerador() {return numerador;}<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 public int leerDenominador() {return denominador;}<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 public void fijar(int n, int d) {<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0numerador = n;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0denominador = d;<\/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<h2><span style=\"color: #000000;\"><strong>Implementaci\u00f3n de las clases<\/strong><\/span><\/h2>\n<p><span style=\"color: #000000;\">El c\u00f3digo fuente de la definici\u00f3n de una clase, con todos sus m\u00e9todos y variables instancia se almacenan en archivos de texto con extensi\u00f3n .java y el nombre de la clase, por ejemplo Racional.java. Normalmente, se sit\u00faa la implementaci\u00f3n de cada clase en un archivo independiente.<\/span><\/p>\n<p><span style=\"color: #000000;\">Las clases pueden proceder de diferentes fuentes:<\/span><\/p>\n<ul>\n<li><span style=\"color: #000000;\">Se pueden declarar e implementar sus propias clases. El c\u00f3digo fuente siempre estar\u00e1 disponible, pueden estar organizadas por paquetes.<\/span><\/li>\n<li><span style=\"color: #000000;\">Se pueden utilizar clases que hayan sido escritas por otras personas o incluso que se han comprado. En este caso, se puede disponer del c\u00f3digo fuente o estar limitado a utilizar el <strong>bytecode<\/strong> de la implementaci\u00f3n. Ser\u00e1 necesario disponer del paquete donde se encuentran.<\/span><\/li>\n<li><span style=\"color: #000000;\">Se puede utilizar clases de los diversos <strong>packages<\/strong> que acompa\u00f1an a su software de desarrollo Java.<\/span><\/li>\n<\/ul>\n<h2><span style=\"color: #000000;\"><strong>Clases p\u00fablicas<\/strong><\/span><\/h2>\n<p><span style=\"color: #000000;\">La declaraci\u00f3n de una clase puede incluir el modificador\u00a0<strong>public\u00a0<\/strong>como prefijo en la cabecera de la clase. Por ejemplo:<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0public class Examen{<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/ miembros de la clase<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0}\u00a0<\/span><\/p>\n<p><span style=\"color: #000000;\">La clase Examen puede ser utilizada por las clases que se encuentran en su mismo archivo (package), o por clases de cualquier otro paquete o archivo. Habitualmente las clases se definen como public, a no ser que se quiera restringir su uso a las clases del paquete. Una clase declarada sin el prefijo public establece una restricci\u00f3n importante, y es que solo podr\u00e1 ser utilizada por las clases definidas en el mismo paquete.<\/span><\/p>\n<h3><span style=\"color: #000000;\"><strong>Advertencia<\/strong><\/span><\/h3>\n<p><span style=\"color: #000000;\">El especificador de acceso\u00a0<strong>public\u00a0<\/strong>es el \u00fanico que se puede especificar en la cabecera de una clase.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Este art\u00edculo es la continuaci\u00f3n del art\u00edculo Clases y objetos I.\u00a0(Ver Clases y objetos I)\u00a0<\/p><p><a class=\"more-link btn\" href=\"https:\/\/www.manualjava.net\/?p=3130\">Seguir leyendo<\/a><\/p>\n","protected":false},"author":1,"featured_media":3137,"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\/3130"}],"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=3130"}],"version-history":[{"count":38,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/posts\/3130\/revisions"}],"predecessor-version":[{"id":3229,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/posts\/3130\/revisions\/3229"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/media\/3137"}],"wp:attachment":[{"href":"https:\/\/www.manualjava.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3130"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3130"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3130"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}