package com.trifulcas.herencia;
public class Empleado {
private String nombre;
// Visible dentro de la propia clase y sus derivadas
protected double sueldo;
private double irpf=.85;
public Empleado(String nombre, double sueldo) {
super();
this.nombre = nombre;
this.sueldo = sueldo;
}
/**
* @return the nombre
*/
public String getNombre() {
return nombre;
}
/**
* @param nombre the nombre to set
*/
public void setNombre(String nombre) {
this.nombre = nombre;
}
/**
* @return the sueldo
*/
public double getSueldo() {
return sueldo;
}
/**
* @param sueldo the sueldo to set
*/
public void setSueldo(double sueldo) {
this.sueldo = sueldo;
}
@Override
public String toString() {
return "Empleado [nombre=" + nombre + ", sueldo=" + sueldo + "]";
}
public double sueldoNeto() {
return sueldo*irpf;
}
}
package com.trifulcas.herencia;
public class Comercial extends Empleado {
private double comision;
private double ventas;
public Comercial(String nombre, double sueldo, double comision) {
// Llamo al constructor de la clase madre
super(nombre, sueldo);
// Inicializo las propiedades de mi propia clase
this.comision=comision;
}
/**
* @return the comision
*/
public double getComision() {
return comision;
}
/**
* @param comision the comision to set
*/
public void setComision(double comision) {
this.comision = comision;
}
/**
* @return the ventas
*/
public double getVentas() {
return ventas;
}
/**
* @param ventas the ventas to set
*/
public void setVentas(double ventas) {
this.ventas = ventas;
}
// El sueldo de un comercial es el sueldo menos el irpf
// mas la comisión por las ventas
// SObre escribo el método
@Override
public double sueldoNeto() {
// Llamo al método de la clase madre que estoy sobreescribiendo
// con la palabra reservada super
return super.sueldoNeto()+comision*ventas;
}
}
package com.trifulcas.herencia;
public class Administrativo extends Empleado {
private String departamento;
private int antiguedad=0;
/**
* @return the departamento
*/
public String getDepartamento() {
return departamento;
}
/**
* @param departamento the departamento to set
*/
public void setDepartamento(String departamento) {
this.departamento = departamento;
}
/**
* @return the antiguedad
*/
public int getAntiguedad() {
return antiguedad;
}
/**
* @param antiguedad the antiguedad to set
*/
public void setAntiguedad(int antiguedad) {
this.antiguedad = antiguedad;
}
public Administrativo(String nombre, double sueldo) {
super(nombre, sueldo);
// TODO Auto-generated constructor stub
}
@Override
public double sueldoNeto() {
// Llamo al método de la clase madre que estoy sobreescribiendo
// con la palabra reservada super
return super.sueldoNeto()+antiguedad*100;
}
}
Empleado ana = new Empleado("Ana", 3000);
System.out.println(ana);
System.out.println(ana.sueldoNeto());
Comercial eva = new Comercial("Eva", 2500, 0.05);
eva.setComision(0.05);
eva.setVentas(10000);
System.out.println(eva);
System.out.println(eva.sueldoNeto());
Administrativo pepe=new Administrativo("Pepe",2000);
pepe.setAntiguedad(20);
System.out.println(pepe.sueldoNeto());
// Estoy creando una lista de empleados
ArrayList<Empleado> empresa=new ArrayList<>();
// Añado ana porque es empleado
empresa.add(ana);
// Puedo añadir eva porque deriva de empleado
empresa.add(eva);
// Puedo añadir a pepe por la misma razón
empresa.add(pepe);
// Polimorfismo
// Polimorfismo es utilizar métodos comunes en clases derivadas
// Aunque tengan comportamientos diferentes
// Yo puedo hacer lo siguiente:
for(Empleado emp:empresa) {
System.out.println(emp.getNombre() + " - " + emp.sueldoNeto());
}