Clases Anidadas en java

31,120 views
30,299 views

Published on

Published in: Technology, Sports
3 Comments
0 Likes
Statistics
Notes
  • Be the first to like this

No Downloads
Views
Total views
31,120
On SlideShare
0
From Embeds
0
Number of Embeds
739
Actions
Shares
0
Downloads
289
Comments
3
Likes
0
Embeds 0
No embeds

No notes for slide

Clases Anidadas en java

  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>

×