Herencia
M.C. Mario Alberto Gómez Rodríguez
Herencia Mecanismo para extender las propiedades y comportamientos (campos y métodos) de otras clases Creación de nuevas clases a partir de otras ya existentes Clase heredera = clase extendida o derivada Herencia simple Composición: utlizar objetos dentro de otros objetos Herencia ≠ Composición
menor detalle jerarquía de clasesmayor detalle
Herencia Superclase (Java) o Clase base (C++) Subclase (Java) o Clase derivada (C++) Java Superclase (superclase directa) Subclase (subclase directa) Superclase indirecta Subclase indirecta Herencia simple: Una clase se deriva “sólo” de una superclase (Java). Herencia múltiple: Una clase se deriva de “más de una” superclase directa (C++).
HerenciaSuperclase (Java) o Clase base (C++) Subclase (Java) o Clase derivada (C++) Java Superclase (superclase directa) Subclase (subclase directa) Superclase indirecta Subclase indirecta Herencia simple: Una clase se deriva “sólo” de una superclase (Java). Herencia múltiple: Una clase se deriva de “más de una” superclase directa (C++).
clase Padre campo primero; campo segundo; campotercero; método haceAlgoUno(){...} método haceAlgoDos(){...} método haceAlgoTres(){...}
clase PrimerHijo campo primero; campo segundo; campo tercero; campo adicionalPrimerHijoUno; campo adicionalPrimerHijoDos; método haceAlgoUno(){...} método haceAlgoDos(){...} método haceAlgoTres(){...} método asignacionPrimerHijo(){...} método destruccionPrimerHijo(){...}
clase SegundoHijo campo primero;campo segundo; campo tercero; campo adicionalSegundoHijoUno; campo adicionalSegundoHijoDos; método haceAlgoUno(){...} método haceAlgoDos(){...} método haceAlgoTres(){...} método inicializacionSegundoHijo(){...} método impresionSegundoHijo(){...} método calculoSegundoHijo(){...} método toStringSegundoHijo(){...}
clase SegundoHijo campo primero; campo segundo; campo tercero; campoadicionalSegundoHijoUno; campo adicionalSegundoHijoDos; método haceAlgoUno(){...} método haceAlgoDos(){...} método haceAlgoTres(){...} método inicializacionSegundoHijo(){...} método impresionSegundoHijo(){...} método calculoSegundoHijo(){...} método toStringSegundoHijo(){...} clase ExtensionSegundoHijo campo primero; campo segundo; campo tercero; campo adicionalSegundoHijoUno; campo adicionalSegundoHijoDos;método haceAlgoUno(){...} método haceAlgoDos(){...} método haceAlgoTres(){...} método inicializacionSegundoHijo(){...} método impresionSegundoHijo(){...} método calculoSegundoHijo(){...} método toStringSegundoHijo{...} método completarSegundoHijo(){...} método obtenerSegundoHijo(){...} método dividirSegundoHijo(){...}
public class Empleado { String nombre; int sueldo; public Empleado(Stringnombre, int sueldo) { this.nombre = nombre; this.sueldo = sueldo; } public void aumentarSueldo(int porcentaje) { sueldo += (int)(sueldo * porcentaje / 100); } public String toString() { return "Nombre: " + nombre + " Sueldo: " + sueldo; } } **************************************** public class Ejecutivo extends Empleado { int presupuesto; public Ejecutivo(String nombre, int sueldo) {super(nombre, sueldo); } void asignarPresupuesto(int p) { presupuesto = p; } }
casting
Ejecutivo jefe = new Ejecutivo( "Juan Perez", 1000); jefe.asignarPresupuesto(1500); jefe.aumentarSueldo(5); ************************************** Empleado elMasRapido = new Empleado ( "Speedy Gonzalez" , 100) ; elMasRapido.asignarPresupuesto(5000); // error ************************************** jefe.clone();jefe.toString(); ************************************** elMasRapido.clone(); elMasRapido.toString();
Object Empleado Ejecutivo
Redefinición de métodos • mismos nombres pero con diferente comportamiento
class Object { ... ... ... public String toString(){ ... } ... ... ... } class Empleado { ... ... ... public String toString(){ return "Nombre: " + nombre + " Sueldo: " + sueldo; } }...
Regístrate para leer el documento completo.