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