Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Clases Anidadas

7,623 views

Published on

Breve introducción a las clases anidadas y a las clases internas en el lenguaje de programación Java

  • Be the first to comment

Clases Anidadas

  1. 1. Anidamiento y Clases Internas
  2. 2. Anidamiento de clases <ul><li>Es posible definir clases dentro de otras clases, las mismas que son conocidas como clases anidadas ( nested classes ) o clases internas (inner classes). </li></ul><ul><li>La clase que contiene a la inner class se la conoce como clase externa (outer class). </li></ul><ul><li>Fueron introducidas en el JDK 1.1. </li></ul><ul><li>Se puede declarar una clase dentro de otra clase o dentro de una interfase. </li></ul><ul><li>Se puede declarar una interfase dentro de otra interfase o dentro de una clase. </li></ul><ul><li>Se puede declarar una clase dentro de un método. </li></ul><ul><li>Se pueden tener varios niveles de anidamiento. </li></ul>
  3. 3. Anidamiento de clases <ul><li>Una clase anidada puede acceder a todos los miembros (hasta los privados) de la clase que la contiene, pero la clase que la contiene no tiene los mismos permisos. </li></ul><ul><li>Los tipos de clases anidadas son: </li></ul><ul><ul><ul><li>static nested (inner) class </li></ul></ul></ul><ul><ul><ul><li>non static nested (inner) class </li></ul></ul></ul><ul><ul><ul><li>Anonymous inner class (clases anónimas) </li></ul></ul></ul>
  4. 4. Static Nested Class <ul><li>No puede acceder a los miembros no estáticos de la clase que la contiene directamente, sino a través de un objeto. Estas clases son raramente usadas. </li></ul>
  5. 5. Ejemplo de static nested class <ul><li>class OuterStatic { </li></ul><ul><li>private int x = 100; </li></ul><ul><li>void test() { </li></ul><ul><li>StaticNested obSta = new StaticNested(); </li></ul><ul><li>obSta.display(); </li></ul><ul><li>} </li></ul><ul><li>static class StaticNested { </li></ul><ul><li>int y = 30; </li></ul><ul><li>int z = 20; </li></ul><ul><li>void display() { </li></ul><ul><li>System.out.println(&quot;display: z = &quot; + z); </li></ul><ul><li>System.out.println(&quot;display: y = &quot; + y); </li></ul><ul><li>OuterStatic obO = new OuterStatic(); </li></ul><ul><li>System.out.println(&quot;display: x = &quot; + obO.x); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>class StaticNestedClassDemo { </li></ul><ul><li>public static void main(String args[]) { </li></ul><ul><li>OuterStatic outer = new OuterStatic(); </li></ul><ul><li>outer.test(); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>StaticNestedClassDemo.java </li></ul>
  6. 6. Non static nested class <ul><li>Conocida también como Inner class . </li></ul><ul><li>Tiene acceso a todas las variables y métodos de la clase que la contiene ( outer class ). </li></ul>
  7. 7. Ejemplo de inner class <ul><li>class Outer { </li></ul><ul><li>int x = 100; </li></ul><ul><li>void test() { </li></ul><ul><li>Inner obIn = new Inner(); </li></ul><ul><li>obIn.display(); </li></ul><ul><li>} </li></ul><ul><li>class Inner { </li></ul><ul><li>int y = 10; </li></ul><ul><li>void display() { </li></ul><ul><li>System.out.println(&quot;display: x = &quot; + x ); </li></ul><ul><li>System.out.println(&quot;display: y = &quot; + y ); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>class InnerClassDemo { </li></ul><ul><li>public static void main(String args[ ]) { </li></ul><ul><li>Outer outer = new Outer(); </li></ul><ul><li>outer.test(); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>InnerClassDemo.java </li></ul><ul><li>Ver también: InnerClassDemo2.java, Outer3.java </li></ul>
  8. 8. Anidamiento de clases <ul><li>Inner class además de ser definida dentro de otra clase, puede también definirse dentro de un método. </li></ul><ul><li>Una clase definida dentro de un método solamente puede acceder a las variables de este, que tengan el modificador final . </li></ul><ul><li>No se pueden definir miembros estáticos dentro de las Non static inner classes, exceptuando las constantes. </li></ul><ul><li>Ver InnerClassDem3.java </li></ul>
  9. 9. Anidamiento de clases <ul><li>Existen clases internas que no tienen nombre, y son las conocidas anonymous inner classes . </li></ul><ul><li>Son útiles para manejar eventos. </li></ul><ul><li>Las clases anónimas pueden extender de una clase o implementar una interfase. </li></ul><ul><li>La sintaxis para crear una clase anónima es la siguiente: </li></ul><ul><ul><li>new <nombre de clase de la que hereda o interfase que implementa> { </li></ul></ul><ul><ul><li>//cuerpo de la clase </li></ul></ul><ul><ul><li>} </li></ul></ul>
  10. 10. Ejemplo de clase an ó nima <ul><li>interface VideoClip { </li></ul><ul><li>void play(); </li></ul><ul><li>void stop(); </li></ul><ul><li>} </li></ul><ul><li>class TestVideoClip { </li></ul><ul><li>void test(VideoClip v) </li></ul><ul><li>{ </li></ul><ul><li>v.play(); </li></ul><ul><li>v.stop(); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>class AnonInnerClassDemo { </li></ul><ul><li>public static void main(String args[ ]) { </li></ul><ul><li>TestVideoClip t = new TestVideoClip(); </li></ul><ul><li>t.test ( new VideoClip() { </li></ul><ul><li>public void play() { System.out.println(“Reproduciendo el video&quot;); } </li></ul><ul><li>public void stop() { System.out.println(&quot;Se detiene el video&quot;); } </li></ul><ul><li>} ) ; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>AnonInnerClassDemo.java </li></ul>
  11. 11. Inner Classes <ul><li>Cuando usted compila una inner class, obtiene un archivo .class con el siguiente formato de nombre: </li></ul><ul><ul><li>OuterClass$InnerClass.class </li></ul></ul><ul><li>Cuando usted compila una clase anónima, obtiene un archivo .class con el siguiente formato de nombre: </li></ul><ul><ul><li>OuterClass$n.class, donde n es un entero que comienza con 1. </li></ul></ul>

×