Es una clase dentro de un método. Nos resultarán útiles cuando se instancien tan solo una vez. Se utilizarán para simplificar nuestro código. El ámbito de esa clase quedará restringido al método al que pertenece, por lo que quedará encapsulada.
SINTAXIS
class Clase_1ª{
public void método() {
class clase_2º_local{//la clase dos no lleva modificador
Código clase 2ª…
}
Código clase método…
}
Código clase 1ª…
}
Ejemplo
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.*;
import javax.swing.*;
import javax.swing.Timer;
public static void main(String[] args) {
//instanciamos la clase reloj
Reloj miReloj = new Reloj(5000,true);
miReloj.Arranca();
JOptionPane.showMessageDialog(null, "SI TOCAS ACCEPTAR PARARAS EL RELO");
}
class Reloj{//clase1ª
//Constructior de reloj pasando por parametros
public Reloj(int intervalo,boolean sonido) {
this.intervalo=intervalo;
this.sonido=sonido;
}
*************************************************
//metodo setter establecer con action listener imprencindible para aplicar la interface timer
public void Arranca() {
__________________________________________________
//clase interna
*******************************************************
class clase2 implements ActionListener{
public void actionPerformed(ActionEvent evento) {
Date HoraActual = new Date();
System.out.println("hora Actual: " + HoraActual);
// en un bolean no hace falta == ni poner las dos conciones se sobreentiende que si lo ponemos asi es verdadero y si no no hace nada
if (sonido) { Toolkit.getDefaultToolkit().beep();}
}
}
**************************************************
Código método
ActionListener oyente = new clase2();
Timer miTemporizador = new Timer(intervalo,oyente);
miTemporizador.start();
}
*******************************************************
Código clase_1
private int intervalo;
private boolean sonido;
}
Una clase interna nos permite acceder a las variables del método, esto nos permite pasarle por parámetros las variables y simplificar nuestro código. La variable que pasemos por parámetros a la clase interna y vallamos a utilizar tendremos que pasarla como final.
ejercicio 2.
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.*;
import javax.swing.*;
import javax.swing.Timer;
public class claseInterna {
public static void main(String[] args) {
Reloj miReloj = new Reloj();
miReloj.Arranca(5000,true);
JOptionPane.showMessageDialog(null, "SI TOCAS ACCEPTAR PARARAS EL RELO");
System.exit(0);
}
}
class Reloj{//clase1ª
public void Arranca(int intervalo, final boolean sonido) {
class clase2 implements ActionListener{
public void actionPerformed(ActionEvent evento) {
Date HoraActual = new Date();
System.out.println("hora Actual: " + HoraActual);
if (sonido) { Toolkit.getDefaultToolkit().beep();}
}
}