Empleados v 2.0

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());
			
		}

Publicado por

Juan Pablo Fuentes

Formador de programación y bases de datos