Las clases internas locales son:
·
Una clase dentro de un método.
·
¿Cuándo se utilizan estos tipos de clases y por qué?
o Son útiles cuando solo se va a utilizar
(instanciar) la clase interna una vez. El objetivo es simplificar aún más el
código.
o Su ámbito queda restringido al método
donde son declaradas. ¿Ventajas?
§ Están muy “encapsuladas”. Ni siquiera la
clase a la que pertenecen puede acceder a ella. Tan solo puede acceder a ella
el método donde están declaradas.
§ El código resulta más simple.
La forma de declarar la clase interna local es la
siguiente:
class
clase_externa{
public
void método(){
class
clase_interna_local{
código
de la clase interna;
}
código
del método;
}
código
de la clase externa;
}
Las clases internas locales no deben llevar ningún modificador de acceso. Seguimos con el ejemplo PruebaTemporizador2.java, si seleccionamos la clase interna, la cortamos y la pegamos dentro del método:
public void enMarcha(int intervalo, final boolean sonido) {
class DameLaHora2 implements ActionListener{
@Override
public void
actionPerformed(ActionEvent e) {
Date
ahora = new Date();
System.out.println("Te
muestro la hora cada 3 seg. "+ahora);
if(sonido) {
Toolkit.getDefaultToolkit().beep();
}
}
}
ActionListener
oyente = new DameLaHora2();
Timer
mitemporizador = new Timer(intervalo, oyente);
mitemporizador.start();
}
}
Esta clase interna puede utilizar los métodos de la
clase padre, incluso las variables. Sin embargo, la clase padre no es accesible
a los métodos y variables de esta clase.
Con el código de esta forma, podemos prescindir de las
variables:
private int intervalo;
private
boolean sonido;
Y pasarlas como parámetros en el método:
public void enMarcha(int intervalo, boolean sonido)
Hay que tener en cuenta que si utilizamos estas
variables locales dentro de la clase local hay que declararlas como final:
public void enMarcha(int intervalo, final boolean sonido)
También podemos prescindir del constructor de la clase
Reloj:
class Reloj {
public
Reloj(int intervalo, boolean sonido) {
this.intervalo
= intervalo;
this.sonido
= sonido;
}
Lo que esta sombreado en amarillo lo eliminamos. En el
método main:
public static void main(String[] args) {
Reloj
mireloj = new Reloj();
mireloj.enMarcha(3000, true);
JOptionPane.showMessageDialog(null, "Pulse
Aceptar para terminar");
System.exit(0);
}
Instanciamos la clase Reloj aunque hallamos eliminado
el constructor siempre hay un constructor por defecto aunque no lo hallamos
creado, en lugar de pasar los parámetros al constructor, pasamos los parámetros
al método.
3.3 CLASES INTERNAS << >> 4.1 INTRODUCCIÓN A LAS APLICACIONES GRÁFICAS
No hay comentarios:
Publicar un comentario