3.3 CLASES INTERNAS

 

Las clases internas o inner class, como su nombre indica, una clase interna es una clase dentro de otra.

      public class Clase1 {

            class Clase2 {

                  código Clase2

            }

            código Clase1

      }

La clase interna sería la Clase2.

¿Por qué son necesarias?

·         Para acceder a los campos privados de una clase desde otra clase.

·         Para ocultar una clase de otras pertenecientes al mismo paquete.

·         Para crear clases internas “anónimas”, muy útiles para gestionar eventos y retrollamadas.

·         Cuando solo una clase debe acceder a los campos de ejemplar de otra clase.

Para ver todo esto vamos a utilizar el ejemplo del apartado anterior PruebaTemporizador.java, dentro del método actionPerformed vamos a crear una instrucción que lo ve va a hacer es además de mostrarnos la hora cada x tiempo suene el típico “clic” de Windows. Para ello vamos a utilizar la clase abstracta Toolkit, esta clase es como un puente entre los recursos de nuestro sistema operativo y nuestros programas Java, con esta clase podemos acceder a la resolución de nuestra pantalla, a los sonidos del sistema, etc. Si escribimos esto:

      public void actionPerformed(ActionEvent e) {

           

            Date ahora = new Date();

            System.out.println("La hora cada 5 segundos: "+ahora);

           

            Toolkit.getDefaultToolkit().beep();

                                                           }

Como ya se ha comentado, además de imprimir por pantalla la hora cada 5 segundos va a sonar un clic, un sonido predeterminado que viene con el sistema operativo. Si ejecutamos la aplicación veremos como se muestra la hora y suena el clic.

Vamos a crear otro ejemplo va a consistir en lo mismo, crear un temporizador, pero esta vez vamos a utilizar una clase interna. Nos creamos una clase PruebaTemporizador2.java e importamos los siguientes paquetes:

package poo;

 

import javax.swing.*;

 

import java.awt.event.*;

 

import java.util.*;

 

import javax.swing.Timer;

 

import java.awt.Toolkit;

 

public class PruebaTemporizador2 {

 

      public static void main(String[] args) {

 

      }

 

}

A continuación nos creamos una clase a la que vamos a llamar Reloj con su constructor que le vamos a pasar como parámetros el intervalo de tiempo que queremos que se ejecute el programa y el sonido que va a hacer cada vez que muestre la hora, posteriormente las inicializamos y declaramos:

class Reloj {

     

      public Reloj(int intervalo, boolean sonido) {

           

            this.intervalo = intervalo;

           

            this.sonido = sonido;

      }

     

      private int intervalo;

     

      private boolean sonido;

}

Luego creamos un método para poner en marcha el programa, después del constructor creamos el método:

      public void enMarcha() {

           

            ActionListener oyente = new DameLaHora2();

           

            Timer mitemporizador = new Timer(intervalo, oyente);

           

            mitemporizador.start();

      }

Nos da error DameLahora2 que esa va a ser la clase interna que vamos a crear, después, utilizamos la clase Timer, instanciamos y lo ponemos en marcha.

Dentro del método main instanciamos la clase Reloj:

      public static void main(String[] args) {

           

            Reloj mireloj = new Reloj(3000, true);

           

            mireloj.enMarcha();

           

            JOptionPane.showMessageDialog(null, "Pulse Aceptar para terminar");

           

            System.exit(0);

 

      }

Llamamos al método enMarcha, mediante una ventana JOptionPane nos indica que la aplicación se ha iniciado, al pulsar el botón Aceptar finalizará por la instrucción que le indicamos System.exit(0).

Después de la declaración de las variables nos creamos la clase interna que va a tener el modificador de acceso private, solo las clases internas pueden llevar este modificador, no pueden llevar otro, vamos a implementar la interfaz ActionListener, dentro del método actionPerformed vamos a indicar que nos muestre la hora mediante la función Date,  mediante un condicional le vamos a indicar que suene el sonido cada vez que muestre la hora:

private class DameLaHora2 implements ActionListener {

 

            @Override

            public void actionPerformed(ActionEvent e) {

                 

                  Date ahora = new Date();

                 

                  System.out.println("Te muestro la hora cada 3 sg "+ahora);

                 

                  if(sonido) {

                       

                        Toolkit.getDefaultToolkit().beep();

                  }

                 

            }

Con esto nuestra aplicación estaría terminada.

3.2 INSTANCE OF << >> 3.4 CLASES INTERNAS LOCALES



No hay comentarios:

Publicar un comentario