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