HerenciaM.C. Mario Alberto Gómez Rodríguez
Herencia  Mecanismo para extender las propiedades y comportamientos (campos ymétodos) de otras clases  Creación de nueva...
Herencia  Superclase (Java) o Clase base (C++)  Subclase (Java) o Clase derivada (C++)  Java        Superclase (superc...
Herencia  Superclase (Java) o Clase base (C++)  Subclase (Java) o Clase derivada (C++)  Java        Superclase (superc...
clase Padre                                campo primero;                                campo segundo;                   ...
clase SegundoHijocampo primero;campo segundo;campo tercero;campo adicionalSegundoHijoUno;campo adicionalSegundoHijoDos;mét...
public class Empleado {  String nombre;  int sueldo;    public Empleado(String nombre, int sueldo) {      this.nombre = no...
Ejecutivo jefe = new Ejecutivo( "Juan Perez", 1000);jefe.asignarPresupuesto(1500);jefe.aumentarSueldo(5);*****************...
Redefinición de métodos •   mismos nombres pero con diferente comportamientoclass Object {    ... ... ...  public String t...
Inicialización de clases derivadas  •     método constructor  •     referencia superclass Ejecutivo extends Empleado {    ...
Modificadores de acceso➢public: Todo el mundo puede acceder al elemento. Si es unatributo, todo el mundo puede ver el elem...
Modificador protectedcombinación de public y privateacceso a clases derivadas y del mismo packageclass Empleado {    prote...
Clase CualquieraClase Padre                               datos y métodos cualesquieradatos y métodos protecteddatos y mét...
Resumen de modificadores   Modificador      Clase   Package   Subclase Otros   public              Y       Y        Y     ...
packageUno                             packageDos                           subclase     claseA                           ...
packageUno                            packageDos                packageTresclaseA        claseB                   claseW  ...
packageUno                            packageDos                     packageTresclaseA        claseB                   cla...
Upcasting y downcasting (RTTI = Run-Time Type Identification)up-casting = “subir a la clase padre”down-casting = “bajar a ...
Operador castConversión de referenciasEmpleado emp = new Ejecutivo("Jefe principal" , 2000);Ejecutivo ej = (Ejecutivo)emp;...
Ejemplo (Punto/Circulo/Cilindro):public class Punto {      Superclase de Circulo private int x; private int y;            ...
Ejemplo (Punto/Circulo/Cilindro):public class Circulo extends Punto {      Subclase de Punto y Superclase de Cilindro priv...
Ejemplo (Punto/Circulo/Cilindro):public class Cilindro extends Circulo {      Subclase de Circulo private double altura;  ...
Ejemplo (Punto/Circulo/Cilindro):public class Principal {  public static void main(String args[]) {    Cilindro cil = new ...
Ejemplo 2 (Punto - static):public class Punto { private int x; private int y; static private int cont = 0;        Atributo...
Ejemplo 2 (Punto - static):public class Prueba { static String mensaje = "Hola!";                                         ...
Próxima SlideShare
Cargando en…5
×

Herencia

347 visualizaciones

Publicado el

0 comentarios
0 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Sin descargas
Visualizaciones
Visualizaciones totales
347
En SlideShare
0
De insertados
0
Número de insertados
2
Acciones
Compartido
0
Descargas
9
Comentarios
0
Recomendaciones
0
Insertados 0
No insertados

No hay notas en la diapositiva.

Herencia

  1. 1. HerenciaM.C. Mario Alberto Gómez Rodríguez
  2. 2. Herencia Mecanismo para extender las propiedades y comportamientos (campos ymé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 clases mayor detalle
  3. 3. 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++).
  4. 4. 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++).
  5. 5. clase Padre campo primero; campo segundo; campo tercero; método haceAlgoUno(){...} método haceAlgoDos(){...} método haceAlgoTres(){...} clase SegundoHijo campo primero;clase PrimerHijo campo segundo;campo primero; campo tercero;campo segundo; campo adicionalSegundoHijoUno;campo tercero; campo adicionalSegundoHijoDos;campo adicionalPrimerHijoUno;campo adicionalPrimerHijoDos; método haceAlgoUno(){...} método haceAlgoDos(){...}método haceAlgoUno(){...} método haceAlgoTres(){...}método haceAlgoDos(){...} método inicializacionSegundoHijo(){...}método haceAlgoTres(){...} método impresionSegundoHijo(){...}método asignacionPrimerHijo(){...} método calculoSegundoHijo(){...}método destruccionPrimerHijo(){...} método toStringSegundoHijo(){...}
  6. 6. clase SegundoHijocampo primero;campo segundo;campo tercero;campo adicionalSegundoHijoUno;campo adicionalSegundoHijoDos;método haceAlgoUno(){...} clase ExtensionSegundoHijométodo haceAlgoDos(){...} campo primero;método haceAlgoTres(){...} campo segundo;método inicializacionSegundoHijo(){...} campo tercero;método impresionSegundoHijo(){...} campo adicionalSegundoHijoUno;método calculoSegundoHijo(){...} campo adicionalSegundoHijoDos;método toStringSegundoHijo(){...} 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(){...}
  7. 7. public class Empleado { String nombre; int sueldo; public Empleado(String nombre, int sueldo) { this.nombre = nombre; casting 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; }}
  8. 8. 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();************************************** ObjectelMasRapido.clone(); EmpleadoelMasRapido.toString(); Ejecutivo
  9. 9. Redefinición de métodos • mismos nombres pero con diferente comportamientoclass Object { ... ... ...  public String toString(){ ... } ... ... ...}class Empleado { ... ... ...  public String toString(){  return "Nombre: " + nombre + " Sueldo: " + sueldo;  }}class Ejecutivo extends Empleado { ... ... ...  public String toString(){  String s = super.toString();        s = s + " Presupuesto: " + presupuesto;        return s;  }}
  10. 10. Inicialización de clases derivadas • método constructor • referencia superclass Ejecutivo extends Empleado {    int presupuesto;    Ejecutivo (String n, int s) {        super(n,s);      ... ... ...    }}***************************  public String toString(){  String s = super.toString();        s = s + " Presupuesto: " + presupuesto;        return s;  }
  11. 11. Modificadores de acceso➢public: Todo el mundo puede acceder al elemento. Si es unatributo, todo el mundo puede ver el elemento, es decir, usarlo yasignarlo. Si es un método todo el mundo puede invocarlo.➢private: Sólo se puede acceder al elemento desde métodos de laclase, o sólo puede invocarse el método desde otro método de laclase.➢protected: Sus métodos/atributos tienen acceso a nivel de clase,paquete y subclase.➢sin modificador: Se pueden acceder/invocar sus elementosdesde cualquier clase del paquete donde se define la clase.
  12. 12. Modificador protectedcombinación de public y privateacceso a clases derivadas y del mismo packageclass Empleado {    protected int sueldo;    . . .} Clase Padre datos y métodos protected datos y métodos private Clase Hija datos y métodos cualesquiera Accesibilidad de datos y métodos protected se encuentren o no dentro del mismo package
  13. 13. Clase CualquieraClase Padre datos y métodos cualesquieradatos y métodos protecteddatos y métodos private Clase HijapackageEjemploDeProtected datos y métodos de clase hijaClase Padredatos y métodos protecteddatos y métodos private Clase Hija datos y métodos cualesquierapackageEjemploDeProtected packageEjercicios
  14. 14. Resumen de modificadores Modificador Clase Package Subclase Otros public Y Y Y Y protected Y Y Y N sin modficador Y Y N N private Y N N N
  15. 15. packageUno packageDos subclase claseA subclaseA claseB claseC Visibilidad de claseAModificador ClaseA ClaseB SubclaseA claseCpublic Y Y Y Yprotected Y Y Y Nsin modficador Y Y N Nprivate Y N N N
  16. 16. packageUno packageDos packageTresclaseA claseB claseW claseY subClaseZ (hereda declaseC claseD claseX claseZ claseZ)considerar el acceso a campos y métodos (miembros)claseA y claseW tienen miembros públicosclaseB, claseY y subClaseZ tienen miembros protectedclaseC y claseX tienen miembros sin modificadorclaseD y claseZ tienen miembros private1- claseC puede acceder a claseD ? ... y viceversa ?2- claseX puede acceder a claseC ? ... y claseZ ?3- claseB puede acceder a claseD ? ... y viceversa ?4- claseA puede acceder a claseZ ? ... y viceversa ?5- claseY puede acceder a claseZ ? ... y viceversa ?6- claseZ puede acceder a claseD ? ... y viceversa ?7- claseW puede acceder a claseD ? ... y viceversa ?8- claseW puede acceder a claseA ? ... y viceversa ?9- clase subClaseZ puede acceder a claseC ? ... y a claseB ?10- clase subClaseZ puede acceder a claseD ? ... y a claseW ?
  17. 17. packageUno packageDos packageTresclaseA claseB claseW claseY subClaseZ (hereda declaseC claseD claseX claseZ claseZ)considerar el acceso a campos y métodos (miembros)claseA y claseW tienen miembros públicosclaseB, claseY y subClaseZ tienen miembros protectedclaseC y claseX tienen miembros sin modificadorclaseD y claseZ tienen miembros private1- claseC puede acceder a claseD ? ... y viceversa ? NO SI2- claseX puede acceder a claseC ? ... y claseZ ? NO NO3- claseB puede acceder a claseD ? ... y viceversa ? NO SI4- claseA puede acceder a claseZ ? ... y viceversa ? NO SI5- claseY puede acceder a claseZ ? ... y viceversa ? NO SI6- claseZ puede acceder a claseD ? ... y viceversa ? NO NO7- claseW puede acceder a claseD ? ... y viceversa ? NO SI8- claseW puede acceder a claseA ? ... y viceversa ? SI SI9- clase subClaseZ puede acceder a claseC ? ... y a claseB ? NO NO10- clase subClaseZ puede acceder a claseD ? ... y a claseW ? NO SI
  18. 18. Upcasting y downcasting (RTTI = Run-Time Type Identification)up-casting = “subir a la clase padre”down-casting = “bajar a la clase hijo”Considerar las clases Automovil y AutomovilCarrera. Suponiendo queacelerar() esté en Automovil y se haya especializado en AutomovilCarrera. Up-castingAutomovilCarrera formulaUno = new AutomovilCarrera();String stringAcelera = formulaUno.acelerar();       //para competirString stringAcelera2 = ((Automovil) formulaUno).acelerar();  //para ciudad*******************************************Automovil[] arrayAutos = { new Automovil(),  new AutomovilCarrera() };boolean valorQuitarVolante = arrayAutos[0].quitarVolante(); // ERRORboolean valorQuitarVolante2 = ((AutomovilCarrera) arrayAutos[1]).quitarVolante(); Down-casting up-casting down-casting
  19. 19. Operador castConversión de referenciasEmpleado emp = new Ejecutivo("Jefe principal" , 2000);Ejecutivo ej = (Ejecutivo)emp; // se convierte la referencia de tipoej.asignarPresupuesto(1500); // correctoej.asignarSueldo(500); // correctoEmpleado emp = new Empleado("Ricardo Castillo" , 2000);Ejecutivo ej = (Ejecutivo)emp; // incorrecto
  20. 20. Ejemplo (Punto/Circulo/Cilindro):public class Punto { Superclase de Circulo private int x; private int y; Invocación del constructor (de la misma public Punto( ){ this( 0, 0 ); clase Punto) que recibe 2 parámetros de } tipo int. public Punto(int x, int y){ Constructores this.x = x; sobrecargados this.y = y; } (Punto) public int getX( ){ “this.x” hace referencia al atributo “x” de return x; la clase. } public void setX(int x){ this.x = x; } public int getY( ){ return y; } public void setY(int y){ this.y = y; }}
  21. 21. Ejemplo (Punto/Circulo/Cilindro):public class Circulo extends Punto { Subclase de Punto y Superclase de Cilindro private double radio; public Circulo( ){ Invocación del constructor (de la misma this( 0.0 ); clase Circulo) que recibe 2 parámetros } de tipo int y un double. public Circulo(double radio){ this( 0, 0, radio ); } Constructores public Circulo(int x, int y, double radio){ sobrecargados super( x, y ); (Circulo) this.radio = radio; } Invocación del constructor (de la “super” public double getRadio( ){ clase Punto) que recibe 2 parámetros de return radio; } tipo int. public void setRadio(double radio){ this.radio = radio; } public double getDiametro( ){ return radio * 2.0; } public double getArea( ){ return Math.PI * radio * radio; } public double getCircunferencia( ){ return Math.PI * getDiametro( ); }}
  22. 22. Ejemplo (Punto/Circulo/Cilindro):public class Cilindro extends Circulo { Subclase de Circulo private double altura; public Cilindro( ){ this( 0, 0, 0.0, 0.0 ); Invocación de distintos constructores de } la misma clase Cilindro. public Cilindro(double altura){ this( 0, 0, 0.0, altura ); } Constructores public Cilindro(double radio, double altura){ sobrecargados this( 0, 0, radio, altura ); (Cilindro) } public Cilindro(int x, int y, double radio, double altura){ Invocación del constructor (de la “super” super( x, y, radio ); this.altura = altura; clase Circulo) que recibe 2 parámetros } de tipo int y un double. public double getAltura( ){ return altura; } Redefinición del método “getArea( )” public void setAltura(double altura){ heredado de la “super” clase Circulo this.altura = altura; } public double getArea( ){ return 2 * super.getArea( ) + super.getCircunferencia( ) * altura; } public double getVolumen( ){ return super.getArea( ) * altura; Invocación del método “getArea( )” de la } “super” clase Circulo}
  23. 23. Ejemplo (Punto/Circulo/Cilindro):public class Principal { public static void main(String args[]) { Cilindro cil = new Cilindro( 5, 5, 4.0, 5.0 ); System.out.println( "Area = " + cil.getArea( )); Creación y manipulación de System.out.println( "Altura = " + cil.getAltura( )); un objeto de tipo Cilindro. System.out.println( "Volumen = " + cil.getVolumen( )); }}
  24. 24. Ejemplo 2 (Punto - static):public class Punto { private int x; private int y; static private int cont = 0; Atributo “static” Punto( ){ x = 0; y = 0; ++cont; } public void setX(int x){ this.x = x; } public int getX( ){ return this.x; } public void setY(int y){ this.y = y; } public int getY( ){ return this.y; } public int getCont( ){ return this.cont; } public void setCont(int cont){ this.cont = cont; }}
  25. 25. Ejemplo 2 (Punto - static):public class Prueba { static String mensaje = "Hola!"; El método main es un método “static” public static void main(String[] args){ Punto p = new Punto( ); p.setX(5); p.setY(4); System.out.println( "X = " + p.getX( ) + ", Y = " + p.getY( ) + ", Cont = " + p.getCont( ) ); Punto p2 = new Punto( ); p2.setX(2); p2.setY(8); System.out.println( "X = " + p2.getX( ) + ", Y = " + p2.getY( ) + ", Cont = " + p2.getCont( ) ); p2.setCont(1000); Punto p3 = new Punto( ); p3.setX(3); p3.setY(9); System.out.println( "X = " + p3.getX( ) + ", Y = " + p3.getY( ) + ", Cont = " + p3.getCont( ) ); }}

×