Ejemplo de Inner Clases
martes, octubre 4, 2011 at 3:00PM
jcarmonaloeches

Este es un concepto polémico en Java.

Básicamente, después de estudiarlo, he llegado a las siguientes conclusiones:

1) Una inner class es una clase íntima con su clase outer.

2) Una inner class puede definir sus propias variables y acceder a las variables de outer.

3) Desde la clase outer, se puede instanciar inner classes y usarlas.

A continuación, introducimos un ejemplo descriptivo de inner clases. Básicamente, vemos que tenemos un array con datos y estos son recorridos mediante un iterador interno, que va recorriendo de dos en dos las posiciones e imprimiendo la información.

Un cordial saludo y suerte,

Jaime.


/**

* Ejemplo de creacion de una outer class e inner class

* Esto es DataStructure es outer class, y después

* el método printEven, se apoya en una clase interna, llamada InnerEvenIterator,

* que básicamente accede a los datos de DataStructure y mediante una variable

* iterador interna los va recorriendo de dos en dos e imprimiéndolos.

* @author jaime

* Fuente: Oracle

*

*/

 

/**

* INNER CLASSES

* Atributos: SIZE definido como final, array de ints.

*

*/

public class DataStructure {

//create an array

private final static int SIZE = 15;

private int[] arrayOfInts = new int[SIZE];

/**

* Constructor: acceso sin problema a las variables.

*/

public DataStructure() {

//fill the array with ascending integer values

for (int i = 0; i < SIZE; i++) {

arrayOfInts[i] = i;

}

}

/**

* PrintEven, creamos un InnerEventIterator (clase interna, que tiene íntima relación

* con nuestra clase) y vamos recorriendo e imprimiendo los valores pares del array.

*/

public void printEven() {

//print out values of even indices of the array

InnerEvenIterator iterator = this.new InnerEvenIterator();

while (iterator.hasNext()) {

System.out.println(iterator.getNext() + " ");

}

}

/**

* Clase interna.

* InnerEventIterator: tiene un atributo next y después dos métodos internos, que pueden acceder

* a arrayOfInts (atributo interno de DataStructure.

* @author jaime

*/

private class InnerEvenIterator {

//Contador, que empieza en la posición 0

private int next = 0;

public boolean hasNext() {

//Comprueba si el elemento actual es el último dentro del array
return (next <= SIZE - 1);

}

public int getNext() {

//Registra un valor dentro del índice par del array.
int retValue = arrayOfInts[next];

//Obtiene el siguiente elemento y lo devuelve

next += 2;

return retValue;

}

}

/**

* Método main de prueba

* @param s

*/

public static void main(String s[]) {

//Cremos un objeto y llamamos al método printEvent, que hemos visto que creará
//una clase inner interna para gestionar el método
DataStructure ds = new DataStructure();

ds.printEven();

}
}
Article originally appeared on javaHispano (http://www.javahispano.org/).
See website for complete article licensing information.