3.1 INTERFACES

 

Las interfaces son un conjunto de directrices que deben cumplir las clases.

Si tenemos la clase Clase1 que implementa la Interfaz1, esta interfaz tiene una serie de directrices o lo que es lo mismo una serie de métodos. Estos métodos también los tienen que tener la Clase1.

Las interfaces establecen los comportamientos (directrices) a cumplir por las clases.

Puede haber interfaces predefinidas que vienen en la API de Java o las podemos crear nosotros mismos, pero tanto unas como otras sólo pueden contener métodos abstractos y constantes.

Otras de las características de las interfaces son las siguientes:

·         Se almacenan en un fichero .class.

·         No se pueden instanciar (no uso de new)

·         Todos sus métodos son public y abstract. No se implementan

·         No tienen variables. Si constantes.

En el ejemplo Uso_empleado.java que estuvimos utilizando en el apartado de la POO, teníamos la clase Jefatura que heredaba de la clase Empleado, si la clase Jefatura a su vez también le implementamos dos interfaces la sintaxis será la siguiente:

class Jefatura extends Empleado implements Interfaz1, Interfaz2

Las interfaces surgen a raíz de solucionar el problema de la herencia múltiple que no tiene Java.

Para ver todos estos conceptos más claros vamos a utilizar el ejemplo Uso_empleado.java del apartado POO cuyo código completo es el siguiente:

package poo;

 

import java.util.Date;

import java.util.GregorianCalendar;

 

public class Uso_empleado {

 

      public static void main(String[] args) {

           

            Jefatura jefe_RRHH = new Jefatura("Carlos Saez", 95000, 2000, 05, 05);

           

            jefe_RRHH.estableceIncentivo(2550);

           

            Empleado[] misEmpleados = new Empleado[6];

           

            misEmpleados[0] = new Empleado("Patricia Martinez", 85000, 2000, 03, 03);

           

            misEmpleados[1] = new Empleado("Paco Rodriguez", 45000, 2001, 05, 07);

           

            misEmpleados[2] = new Empleado("Antonio Morales", 42000, 2002, 12, 22);

           

            misEmpleados[3] = new Empleado("Rocio Escarti");

           

            misEmpleados[4] = jefe_RRHH; //Polimorfismo

           

            misEmpleados[5] = new Jefatura("Maria Lopez", 102000, 2001, 03, 03);

           

            Jefatura jefe_finanzas = (Jefatura) misEmpleados[5];

           

            jefe_finanzas.estableceIncentivo(5000);

           

           

           

            for(Empleado e: misEmpleados) {

                 

                  e.subeSueldo(5);

            }

           

            for(Empleado e: misEmpleados) {

                 

                  System.out.println("Nombre: "+e.dameNombre()+" Sueldo: "+e.dameSue()+

                             " Fecha contrato: "+e.dameFechaAlta());

            }

           

            /*Empleado empleado1 = new Empleado("Patricia Martinez", 85000, 2000, 03, 03);

           

            Empleado empleado2 = new Empleado("Paco Rodriguez", 45000, 2001, 05, 07);

           

            Empleado empleado3 = new Empleado("Antonio Morales", 42000, 2002, 12, 22);

           

            empleado1.subeSueldo(5);

           

            empleado2.subeSueldo(5);

           

            empleado3.subeSueldo(5);*/

           

            /*for(int i=0; i<3; i++) {

                 

                  misEmpleados[i]

            }

           

            System.out.println("Nombre: "+empleado1.dameNombre()+" Sueldo: "+empleado1.dameSue()+

                        " Fecha contrato: "+empleado1.dameFechaAlta());

           

            System.out.println("Nombre: "+empleado2.dameNombre()+" Sueldo: "+empleado2.dameSue()+

                        " Fecha contrato: "+empleado2.dameFechaAlta());

           

            System.out.println("Nombre: "+empleado3.dameNombre()+" Sueldo: "+empleado3.dameSue()+

                        " Fecha contrato: "+empleado3.dameFechaAlta());*/

           

 

      }

}

 

 class Empleado {

     

      public Empleado(String nom, double sue, int agno, int mes, int dia) {

           

            nombre = nom;

           

            sueldo = sue;

           

            GregorianCalendar calendario = new GregorianCalendar(agno, mes-1, dia);

           

            altacontrato = calendario.getTime();

            }

     

      public Empleado(String nom) {

           

            this(nom, 30000, 2002, 01, 01);

      }

 

 

public String dameNombre() {

     

      return nombre;

}

 

public  double dameSue() {

     

      return sueldo;

}

public Date dameFechaAlta() {

     

      return altacontrato;

}

 

public void subeSueldo(double porcentaje) {

     

      double aumento = sueldo * porcentaje/100;

     

      sueldo+=aumento;

}

 

private String nombre;

 

private double sueldo;

 

private Date altacontrato;

      }

 

 class Jefatura extends Empleado {

       

       public Jefatura(String nom, double sue, int agno, int mes, int dia) {

             

             super(nom, sue, agno, mes, dia);

       }

       

       public void estableceIncentivo(double b) {

             

             incentivo=b;

       }

       

       public double dameSue() {

             

             double sueldoJefe=super.dameSue();

             

             return sueldoJefe + incentivo;

       }

        private double incentivo;

 }

Si recordamos este archivo nos mostraba la información de los empleados con el nombre, el sueldo y la fecha de alta del contrato, además creamos otra clase Jefatura en la cual creamos dos empleados pertenecientes a esta clase:



Lo que queremos hacer es ordenar el array para que nos muestre los empleados de menor a mayor sueldo.

Hay un método en la clase Array que se llama sort que permite la ordenación de los elementos de un array. Para conocer más acerca de este método, es recomendable ir a la API de Java para saber más acerca de él y tener más claro el ejemplo conforme se va realizando.

En el ejemplo de Uso_empleados, en el método main, antes del segundo foreach si escribimos esto:

Arrays.sort(misEmpleados);

Y lo ejecutamos:



El error nos indica que la clase Empleado no puede hacer un class a la interfaz Comparable. Por lo que el siguiente paso sería irse a la clase Empleado e implementar la interfaz Comparable:

class Empleado implements Comparable {

Sin embargo, nos da un error ya que la clase Empleado debe incluir el método de la clase Comparable, para verlo nos situamos con el ratón sobre el error:



Nos indica que debe implementar el método abstracto compareTo. Por lo que construimos el método:

public int compareTo(Object miObjeto) {

   

    Empleado otroEmpleado=(Empleado) miObjeto;

}

Este método me va a comparar el sueldo de un empleado con otro. A continuación, escribiríamos lo siguiente:

public int compareTo(Object miObjeto) {

   

    Empleado otroEmpleado=(Empleado) miObjeto;

   

    if(this.sueldo<otroEmpleado.sueldo) {

       

        return -1;

 }

 if(this.sueldo>otroEmpleado.sueldo) {

      

        return 1;

 }

 

 return 0;

 

}

Si ahora ejecutamos la aplicación ya nos tiene que salir los empleados ordenados por sueldo:



Con las clases podemos crear instancias, por ejemplo, podemos hacer esto:

Empleado director_comercial=new Jefatura(“Sonia”, 85000, 2011, 05, 06);

Sin embargo, las interfaces no se pueden instanciar, esto no es correcto:

Comparable ejemplo=new Comparable();

En cambio sí que podemos instanciar una clase de tipo interface:

Comparable ejemplo=new Empleado(“Antonio”, 55000, 1998, 06, 08);


2.17 TIPOS ENUMERADOS << >> 3.2 INSTANCE OF



No hay comentarios:

Publicar un comentario