Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
orientada a objetos
LICENCIATURA EN SISTEMAS
FCAD - UNER
Unidad 5
Herencia y Polimorfismo.
Herencia.
Fundamentos de la herencia.
Superclases: acceso a miembros.
Referencia a la superclase: super.
Creación de una jerarquía multinivel.
Sobrescritura de métodos.
Selección de métodos en forma dinámica.
Utilización de final con la herencia.
Control de acceso.
Clases abstractas.
La clase Object.
Uso de InstanceOf.
Interfaces.
Definición de interfaces.
Implementación de una interfaz.
Implementación parcial.
Utilización de las interfaces.
Herencia en interfaces.
Herencia
Cada vez que encontremos la relación "es-un" entre
dos clases, estamos ante la presencia de herencia.
Clase
Base
Clases
Derivadas
public MedicoFamilia () { }
Herencia
Acceso a miembros de la superclase
public class Medico {
private boolean trabajaEnHospital;
public Medico () { }
Herencia
Referencia a la clase base: super
Constructores en clases derivadas
El constructor de una clase derivada puede llamar al constructor de
su superclase por medio de la palabra super:
super(lista de parámetros);
public class Medico { public class Cirujano extends Medico {
private boolean trabajaEnHospital;
public Cirujano () { super(true); }
public Medico () { }
public void trataAPaciente () {
public Medico (boolean trabaja) { // realiza cirujía }
this.trabajaEnHospital=trabaja; }
public void realizaIncision () {
public boolean getTrabajaEnHospital () { // practica incisión
return trabajaEnHospital; } }
Herencia
Referencia a la clase base: super
Otro uso de super
super.miembro
dónde miembro puede ser un método o una variable de instancia.
Herencia
Creación de jerarquía multinivel
Podemos construir jerarquías que contengas varios niveles
de herencia
public class Caja {
private double ancho; Caja() {
private double largo; ancho = -1;
private double profundidad; largo = -1;
profundidad = -1;
Caja(Caja objeto) { }
ancho = objeto.ancho; Caja(double valor) {
largo = objeto.largo; ancho = valor;
profundidad = objeto.profundidad; largo = valor;
} profundidad = valor;
}
Caja(double ancho, double largo, double
profundidad) { double getVolumen() {
this.ancho = ancho; return ancho * largo *
this.largo = largo; profundidad;
this.profundidad = profundidad; }
} }
Herencia
Creación de jerarquía multinivel
public class CajaPeso extends Caja{
private double peso;
public double getPeso() {
CajaPeso(CajaPeso objeto) { return peso;
super(objeto); }
peso = objeto.peso; }
}
CajaPeso() {
super();
peso = -1;
}
Herencia
Creación de jerarquía multinivel
public class CajaCosto extends CajaPeso{
private double costo;
CajaCosto(double valor, double peso,
double costo) {
CajaCosto(CajaCosto objeto) {
super(valor, peso);
super(objeto);
this.costo = costo;
costo = objeto.costo;
}
}
double getCosto() {
CajaCosto(double ancho, double largo,
return costo;
double profundidad, double peso, double costo)
}
{
}
super(ancho, largo, profundidad, peso);
this.costo = costo;
}
CajaCosto() {
super();
this.costo = -1;
}
Herencia
Creación de jerarquía multinivel
public class DemoNiveles {
public static void main(String args[]) {
CajaCosto caja1 = new CajaCosto(10, 20, 15, 10, 3.41);
CajaCosto caja2 = new CajaCosto(2, 3, 4, 0.76, 1.28);
double volumen;
volumen = caja1.getVolumen();
System.out.println("Volumen de caja1 es " + volumen);
System.out.println("Peso de caja1 es "+ caja1.getPeso());
System.out.println("Costo de envio: $" + caja1.getCosto());
System.out.println();
volumen = caja2.getVolumen();
System.out.println("Volumen de caja2 es " + volumen);
System.out.println("Peso de caja2 es "+ caja2.getPeso());
System.out.println("Costo caja2: $" + caja2.getCosto());
}
}
Herencia y Polimorfismo
Sobrescritura de métodos
Una clase puede redefinir (volver a definir) cualquiera de
los métodos heredados de su superclase que no sean final.
El nuevo método sustituye al heredado para todos los
efectos en la clase que lo ha redefinido.
Herencia y Polimorfismo
Sobrescritura de métodos
public class Personal {
private String nombre;
private String apellido;
private double sueldoBase; public void setSueldoBase(double sueldo) {
private double porcentajeDescuento; this.sueldoBase=sueldo;
}
Personal() {
nombre=""; public double getPorcentajeDescuento() {
apellido=""; return porcentajeDescuento;
sueldoBase=0.0; }
porcentajeDescuento=0.0;
} public void
setPorcentajeDescuento(double descuento) {
Personal(String nombre, String apellido, porcentajeDescuento=descuento;
double sueldo, double descuento) { }
this.nombre=nombre;
this.apellido=apellido; public double calcularSueldo() {
this.sueldoBase=sueldo; return sueldoBase-
this.porcentajeDescuento=descuento; (sueldoBase*porcentajeDescuento/100);
} }
}
public double getSueldoBase() {
return sueldoBase;
}
Herencia y Polimorfismo
Sobrescritura de métodos
public class Administrativo extends Personal{
private double importeVentas;
private double porcentajeComision; public double calcularSueldo() {
double sueldoSinDescuentos;
Administrativo() { sueldoSinDescuentos= getSueldoBase()
super(); + (importeVentas*porcentajeComision/100);
importeVentas=0;
} return sueldoSinDescuentos -
(sueldoSinDescuentos*getPorcentajeDescuento(
Administrativo(String nombre, String )/100);
apellido, double sueldo, double descuento, }
double comision, double importeVentas) { }
super(nombre, apellido, sueldo,
descuento);
this.importeVentas=importeVentas;
this.porcentajeComision=comision;
}
Herencia y Polimorfismo
Sobrescritura de métodos
public class UsoHerencia {
public static void main(String args[]) {
Personal p1 = new Personal("Maria","Martinez",2000,15);
Administrativo a1 = new
Administrativo("Juan","Rodriguez",1800,15,10,5000);
System.out.println("Sueldo de p1 es "+p1.calcularSueldo());
System.out.println("Sueldo de a1 es "+a1.calcularSueldo());
}
}
Herencia y Polimorfismo
¿Qué método es llamado?
Animal
imagen Lobo l = new Lobo();
comida l.hacerRuido();
habitat l.roam();
hacerRuido() l.comer();
comer()
dormir() l.dormir()
roam()
Felino Canino
hacerRuido()
comer()
Leon Gato Tigre Lobo Perro
Ejercicio
Una empresa agroalimentaria trabaja con tres tipos de productos: productos
frescos, productos refrigerados y productos congelados.Todos los productos
tienen fecha de vencimiento y número de lote. A su vez, los productos frescos
deben llevar la fecha de envasado; los productos refrigerados deben llevar el
código del organismo de supervisión alimentaria, la fecha de envasado y la
temperatura de mantenimiento recomendada; mientras que los productos
congelados deben llevar la fecha de envasado y la temperatura de
mantenimiento recomendada.
Hay tres tipos de productos congelados: congelados por aire, congelados por
agua y congelados por nitrógeno. Los productos congelados por aire deben
llevar la información de la composición del aire con que fue congelado. Los
productos congelados por agua deben llevar la información de la salinidad del
agua (gramos de sal por litro) con que se realizó la congelación. Los productos
congelados por nitrógeno deben llevar la información del método de
congelación empleado y del tiempo de exposición al nitrógeno expresada en
segundos.
Construir la jerarquía de clases, según la descripción anterior y luego
implementarlas en Java.
Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2018
Unidad 5 Herencia y Polimorfismo.
Ejercicios
1. Dado el siguiente diagrama de clases en UML, transcribirlo a Java.
Automovil
Motor
+NroChasis: String
+Marca: String 1 1 +Cilindrada: Integer
+Modelo: String +NroMotor: String
+Anio: Integer tiene +Combustible: Integer
+Segmento: String +Torque: Integer
+Consumo: Integer
Bibliografía complementaria