Seguidores

MIS WEBS



domingo, 31 de diciembre de 2017

CLASE INTERNA O ANIDADA EN JAVA





¿Qué son?
Una clase interna es una clase dentro de otra. Fueron introducidas en la versión 1.1 y son conocidas en inglés como Inner Class (clase interna) o Nested Class (clase anidada).
Una clase interna conoce los detalles de la clase contenedora y puede comunicarse con ella. Además el tipo de código que puede escribirse con las clases internas es más elegante y claro.
Una clase anidada siempre la declararemos como private.

¿Para qué sirve?

Para acceder a los campos privados de una clase desde otra clase
Para ocultar una clase de otras pertenecientes al mismo paquete, con esto conseguiremos encapsular nuestra clase interna.
Para crear clases internas “anónimas”, nos pueden resultar útiles para gestionar eventos retro llamadas.
Cuando solo una clase debe acceder a los campos de ejemplar de otra clase.
Creando clases internas nos ahorramos generar métodos getters y setters.

EJERCICIO.

package poo; 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) {
         //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() {
ActionListener oyente = new clase2();
Timer miTemporizador = new Timer(intervalo,oyente);
         miTemporizador.start();
     }
     private int intervalo;
     private boolean sonido;
    
     private 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();
}
         }
     }
}

No hay comentarios:

Publicar un comentario

Buscar este blog

Sandisk y Western Digital