SlideShare a Scribd company logo
1 of 25
Download to read offline
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 clases




       mayor 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++).
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++).
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(){...}
clase SegundoHijo
campo primero;
campo segundo;
campo tercero;
campo adicionalSegundoHijoUno;
campo adicionalSegundoHijoDos;

método haceAlgoUno(){...}                 clase ExtensionSegundoHijo
mé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(){...}
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;
    }
}
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();

**************************************         Object
elMasRapido.clone();                             Empleado
elMasRapido.toString();
                                                        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;
  }
}
class Ejecutivo extends Empleado {
    ... ... ...
  public String toString(){
         String s = super.toString();
        s = s + " Presupuesto: " + presupuesto;
        return s;
  }
}
Inicialización de clases derivadas
  •
     método constructor
  •
     referencia super

class 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;
  }
Modificadores de acceso
➢public: Todo el mundo puede acceder al elemento. Si es un
atributo, todo el mundo puede ver el elemento, es decir, usarlo y
asignarlo. Si es un método todo el mundo puede invocarlo.

➢private: Sólo se puede acceder al elemento desde métodos de la
clase, o sólo puede invocarse el método desde otro método de la
clase.

➢protected: Sus métodos/atributos tienen acceso a nivel de clase,
paquete y subclase.

➢sin modificador: Se pueden acceder/invocar sus elementos
desde cualquier clase del paquete donde se define la clase.
Modificador protected
combinación de public y private
acceso a clases derivadas y del mismo package

class 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
Clase Cualquiera
Clase Padre
                               datos y métodos cualesquiera
datos y métodos protected

datos y métodos private
                               Clase Hija

packageEjemploDeProtected      datos y métodos de clase hija




Clase Padre
datos y métodos protected

datos y métodos private
                               Clase Hija
                               datos y métodos cualesquiera


packageEjemploDeProtected   packageEjercicios
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
packageUno                             packageDos

                           subclase
     claseA                                 subclaseA

     claseB                                 claseC



   Visibilidad de claseA




Modificador ClaseA ClaseB                 SubclaseA claseC

public                     Y          Y          Y           Y
protected                  Y          Y          Y           N
sin modficador             Y          Y          N           N
private                    Y          N          N           N
packageUno                            packageDos                packageTres

claseA        claseB                   claseW          claseY    subClaseZ
                                                                 (hereda de
claseC        claseD                   claseX          claseZ      claseZ)


considerar el acceso a campos y métodos (miembros)
claseA y claseW tienen miembros públicos
claseB, claseY y subClaseZ tienen miembros protected
claseC y claseX tienen miembros sin modificador
claseD y claseZ tienen miembros private

1- 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 ?
packageUno                            packageDos                     packageTres

claseA        claseB                   claseW          claseY         subClaseZ
                                                                      (hereda de
claseC        claseD                   claseX          claseZ           claseZ)


considerar el acceso a campos y métodos (miembros)
claseA y claseW tienen miembros públicos
claseB, claseY y subClaseZ tienen miembros protected
claseC y claseX tienen miembros sin modificador
claseD y claseZ tienen miembros private

1- claseC puede acceder a claseD ? ... y viceversa ?            NO   SI
2- claseX puede acceder a claseC ? ... y claseZ ?               NO   NO
3- claseB puede acceder a claseD ? ... y viceversa ?            NO   SI
4- claseA puede acceder a claseZ ? ... y viceversa ?            NO   SI
5- claseY puede acceder a claseZ ? ... y viceversa ?            NO   SI
6- claseZ puede acceder a claseD ? ... y viceversa ?            NO   NO
7- claseW puede acceder a claseD ? ... y viceversa ?            NO   SI
8- claseW puede acceder a claseA ? ... y viceversa ?            SI   SI
9- clase subClaseZ puede acceder a claseC ? ... y a claseB ?    NO   NO
10- clase subClaseZ puede acceder a claseD ? ... y a claseW ?   NO   SI
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 que
acelerar() esté en Automovil y se haya especializado en AutomovilCarrera.
                                                        Up-casting
AutomovilCarrera formulaUno = new AutomovilCarrera();
String stringAcelera = formulaUno.acelerar();              //para competir
String stringAcelera2 = ((Automovil) formulaUno).acelerar();  //para ciudad
*******************************************
Automovil[] arrayAutos = { new Automovil(),  new AutomovilCarrera() };
boolean valorQuitarVolante = arrayAutos[0].quitarVolante(); // ERROR
boolean valorQuitarVolante2 = ((AutomovilCarrera) 
arrayAutos[1]).quitarVolante();                           Down-casting



                                up-casting

                                down-casting
Operador cast
Conversión de referencias

Empleado emp = new Ejecutivo("Jefe principal" , 2000);
Ejecutivo ej = (Ejecutivo)emp; // se convierte la referencia de tipo
ej.asignarPresupuesto(1500); // correcto
ej.asignarSueldo(500);          // correcto

Empleado emp = new Empleado("Ricardo Castillo" , 2000);
Ejecutivo ej = (Ejecutivo)emp; // incorrecto
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;
    }
}
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( );
    }
}
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
}
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( ));
  }
}
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;
    }
}
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( ) );
    }
}

More Related Content

What's hot

Herencia y polimorfismo unidad 5 semestre 2
Herencia y polimorfismo unidad 5 semestre 2Herencia y polimorfismo unidad 5 semestre 2
Herencia y polimorfismo unidad 5 semestre 2K Manuel TN
 
programacion orientada a objetos
programacion orientada a objetosprogramacion orientada a objetos
programacion orientada a objetosale8819
 
Introducción a la programación en Python (día 2)
Introducción a la programación en Python (día 2)Introducción a la programación en Python (día 2)
Introducción a la programación en Python (día 2)CodeSyntax
 
10 Curso de POO en java - métodos modificadores y analizadores
10 Curso de POO en java - métodos modificadores y analizadores10 Curso de POO en java - métodos modificadores y analizadores
10 Curso de POO en java - métodos modificadores y analizadoresClara Patricia Avella Ibañez
 
9 Curso de POO en java - variables, constantes y objetos
9 Curso de POO en java - variables, constantes y objetos9 Curso de POO en java - variables, constantes y objetos
9 Curso de POO en java - variables, constantes y objetosClara Patricia Avella Ibañez
 
Programación 3: Clases y objetos en Java
Programación 3: Clases y objetos en JavaProgramación 3: Clases y objetos en Java
Programación 3: Clases y objetos en JavaAngel Vázquez Patiño
 
Conceptos poo progra visual
Conceptos poo progra visualConceptos poo progra visual
Conceptos poo progra visualLibertad25
 

What's hot (20)

JAVA OO - TEMA 01 - CLASES Y OBJETOS
JAVA OO - TEMA 01 - CLASES Y OBJETOSJAVA OO - TEMA 01 - CLASES Y OBJETOS
JAVA OO - TEMA 01 - CLASES Y OBJETOS
 
Herencia y polimorfismo unidad 5 semestre 2
Herencia y polimorfismo unidad 5 semestre 2Herencia y polimorfismo unidad 5 semestre 2
Herencia y polimorfismo unidad 5 semestre 2
 
JAVA ORIENTADO A OBJETOS - ALCANCE DE CLASE
JAVA ORIENTADO A OBJETOS - ALCANCE DE CLASEJAVA ORIENTADO A OBJETOS - ALCANCE DE CLASE
JAVA ORIENTADO A OBJETOS - ALCANCE DE CLASE
 
Poo ok
Poo okPoo ok
Poo ok
 
programacion orientada a objetos
programacion orientada a objetosprogramacion orientada a objetos
programacion orientada a objetos
 
Tema2
Tema2Tema2
Tema2
 
Unidad o informatica
Unidad o informaticaUnidad o informatica
Unidad o informatica
 
Unidad 2 clases y objetos
Unidad 2 clases y objetosUnidad 2 clases y objetos
Unidad 2 clases y objetos
 
Herencia
HerenciaHerencia
Herencia
 
Java OO Tema 04 Alcance de Clase
Java OO Tema 04 Alcance de ClaseJava OO Tema 04 Alcance de Clase
Java OO Tema 04 Alcance de Clase
 
Herencia
HerenciaHerencia
Herencia
 
Definición de clases en POO
Definición de clases en POODefinición de clases en POO
Definición de clases en POO
 
Java OO - Tema 06 - Interfaces
Java OO - Tema 06 -  InterfacesJava OO - Tema 06 -  Interfaces
Java OO - Tema 06 - Interfaces
 
Introducción a la programación en Python (día 2)
Introducción a la programación en Python (día 2)Introducción a la programación en Python (día 2)
Introducción a la programación en Python (día 2)
 
8.Clases y objetos Java
8.Clases y objetos Java8.Clases y objetos Java
8.Clases y objetos Java
 
10 Curso de POO en java - métodos modificadores y analizadores
10 Curso de POO en java - métodos modificadores y analizadores10 Curso de POO en java - métodos modificadores y analizadores
10 Curso de POO en java - métodos modificadores y analizadores
 
9 Curso de POO en java - variables, constantes y objetos
9 Curso de POO en java - variables, constantes y objetos9 Curso de POO en java - variables, constantes y objetos
9 Curso de POO en java - variables, constantes y objetos
 
Programación 3: Clases y objetos en Java
Programación 3: Clases y objetos en JavaProgramación 3: Clases y objetos en Java
Programación 3: Clases y objetos en Java
 
JAVA ORIENTADO A OBJETOS - MIEMBROS DE CLASE
JAVA ORIENTADO A OBJETOS - MIEMBROS DE CLASEJAVA ORIENTADO A OBJETOS - MIEMBROS DE CLASE
JAVA ORIENTADO A OBJETOS - MIEMBROS DE CLASE
 
Conceptos poo progra visual
Conceptos poo progra visualConceptos poo progra visual
Conceptos poo progra visual
 

Viewers also liked

Evaluación 07
Evaluación 07Evaluación 07
Evaluación 07carolina
 
Adherencia terapéutica 2
Adherencia terapéutica 2Adherencia terapéutica 2
Adherencia terapéutica 2flopez602y
 
Publicidad en internet
Publicidad en internetPublicidad en internet
Publicidad en internetcamez4
 
Elizabet pacheco proyecto final grupo 34
Elizabet pacheco proyecto  final grupo 34Elizabet pacheco proyecto  final grupo 34
Elizabet pacheco proyecto final grupo 34elizabeth_de_miguel
 
Posicionamiento en buscadores y campañas publicitarias en google
Posicionamiento en buscadores y campañas publicitarias en googlePosicionamiento en buscadores y campañas publicitarias en google
Posicionamiento en buscadores y campañas publicitarias en googleSekuenz Internet Business Solutions
 
tesis modelo didactico para mejorar las capacidades investigativas
tesis  modelo didactico para mejorar las capacidades investigativastesis  modelo didactico para mejorar las capacidades investigativas
tesis modelo didactico para mejorar las capacidades investigativasJorge Roger Aranda Gonzalez
 
Chat Y Mensajera Instantanea
Chat Y Mensajera InstantaneaChat Y Mensajera Instantanea
Chat Y Mensajera Instantaneaguest286dfc
 
Ndiapositivas de derecho const
Ndiapositivas de derecho constNdiapositivas de derecho const
Ndiapositivas de derecho constnaranjodiego071
 
Areas de primaria
Areas de primariaAreas de primaria
Areas de primariaSilvia2310
 
The secret story of aurlie bonhoffen
The secret story of aurlie bonhoffenThe secret story of aurlie bonhoffen
The secret story of aurlie bonhoffencblancato
 
La planificación estrategica
La planificación estrategicaLa planificación estrategica
La planificación estrategicadeicycumbal
 
La planificación estrategica
La planificación estrategicaLa planificación estrategica
La planificación estrategicayolandacuaran
 
C1f Designer Polymers
C1f  Designer  PolymersC1f  Designer  Polymers
C1f Designer PolymersM F Ebden
 

Viewers also liked (20)

Contos quibungo
Contos quibungoContos quibungo
Contos quibungo
 
Medición de social media
Medición de social media Medición de social media
Medición de social media
 
Evaluación 07
Evaluación 07Evaluación 07
Evaluación 07
 
Adherencia terapéutica 2
Adherencia terapéutica 2Adherencia terapéutica 2
Adherencia terapéutica 2
 
Publicidad en internet
Publicidad en internetPublicidad en internet
Publicidad en internet
 
Elizabet pacheco proyecto final grupo 34
Elizabet pacheco proyecto  final grupo 34Elizabet pacheco proyecto  final grupo 34
Elizabet pacheco proyecto final grupo 34
 
Posicionamiento en buscadores y campañas publicitarias en google
Posicionamiento en buscadores y campañas publicitarias en googlePosicionamiento en buscadores y campañas publicitarias en google
Posicionamiento en buscadores y campañas publicitarias en google
 
tesis modelo didactico para mejorar las capacidades investigativas
tesis  modelo didactico para mejorar las capacidades investigativastesis  modelo didactico para mejorar las capacidades investigativas
tesis modelo didactico para mejorar las capacidades investigativas
 
Chat Y Mensajera Instantanea
Chat Y Mensajera InstantaneaChat Y Mensajera Instantanea
Chat Y Mensajera Instantanea
 
Desigualdade
DesigualdadeDesigualdade
Desigualdade
 
Manual mongodb
Manual mongodbManual mongodb
Manual mongodb
 
Ndiapositivas de derecho const
Ndiapositivas de derecho constNdiapositivas de derecho const
Ndiapositivas de derecho const
 
Violencia de género 4
Violencia de género 4Violencia de género 4
Violencia de género 4
 
Estructura alexxavier barco
Estructura alexxavier barcoEstructura alexxavier barco
Estructura alexxavier barco
 
Areas de primaria
Areas de primariaAreas de primaria
Areas de primaria
 
Mexico 01
Mexico 01Mexico 01
Mexico 01
 
The secret story of aurlie bonhoffen
The secret story of aurlie bonhoffenThe secret story of aurlie bonhoffen
The secret story of aurlie bonhoffen
 
La planificación estrategica
La planificación estrategicaLa planificación estrategica
La planificación estrategica
 
La planificación estrategica
La planificación estrategicaLa planificación estrategica
La planificación estrategica
 
C1f Designer Polymers
C1f  Designer  PolymersC1f  Designer  Polymers
C1f Designer Polymers
 

Similar to Herencia

Cuarta sesion herencia y polimorfismo-explicacion anibal
Cuarta sesion herencia y polimorfismo-explicacion anibalCuarta sesion herencia y polimorfismo-explicacion anibal
Cuarta sesion herencia y polimorfismo-explicacion anibalCarlos Anibal Riascos Hurtado
 
POO-3-Herencia-10-11.pdf
POO-3-Herencia-10-11.pdfPOO-3-Herencia-10-11.pdf
POO-3-Herencia-10-11.pdfNone
 
JAVA_BASICO_modo_consola_introduccion.pptx
JAVA_BASICO_modo_consola_introduccion.pptxJAVA_BASICO_modo_consola_introduccion.pptx
JAVA_BASICO_modo_consola_introduccion.pptxFamiliaAyluardo
 
2.android java
2.android   java2.android   java
2.android javaguidotic
 
02 python Programación orientada a objetos y funcional
02 python Programación orientada a objetos y funcional02 python Programación orientada a objetos y funcional
02 python Programación orientada a objetos y funcionalJuan Rodríguez
 
Lenguajes de Programación: Herencia, Polimorfismo Y UML
Lenguajes de Programación: Herencia, Polimorfismo Y UMLLenguajes de Programación: Herencia, Polimorfismo Y UML
Lenguajes de Programación: Herencia, Polimorfismo Y UMLLuis Fernando Aguas Bucheli
 
Clase8 innerclasses
Clase8 innerclassesClase8 innerclasses
Clase8 innerclassesjorg_marq
 
Introducción a la programación y la informática. Tema 5
Introducción a la programación y la informática. Tema 5Introducción a la programación y la informática. Tema 5
Introducción a la programación y la informática. Tema 5Andres Garcia Garcia
 
3 interfaces clases_abstractas_herencia_polimorfismo
3 interfaces clases_abstractas_herencia_polimorfismo3 interfaces clases_abstractas_herencia_polimorfismo
3 interfaces clases_abstractas_herencia_polimorfismoJesus Alberto Iribe Gonzalez
 
Herencia y Polimorfismo en Java
Herencia y Polimorfismo en JavaHerencia y Polimorfismo en Java
Herencia y Polimorfismo en JavaAme Linares Vivas
 
programacion orientada a objetos
programacion orientada a objetosprogramacion orientada a objetos
programacion orientada a objetosjent46
 
Sesion 07 nivel_acceso_miembros_clases
Sesion 07 nivel_acceso_miembros_clasesSesion 07 nivel_acceso_miembros_clases
Sesion 07 nivel_acceso_miembros_clasesecodereck
 
Clases metodos y atributos
Clases metodos y atributosClases metodos y atributos
Clases metodos y atributosRobert Wolf
 

Similar to Herencia (20)

Cuarta sesion herencia y polimorfismo-explicacion anibal
Cuarta sesion herencia y polimorfismo-explicacion anibalCuarta sesion herencia y polimorfismo-explicacion anibal
Cuarta sesion herencia y polimorfismo-explicacion anibal
 
Semana 3 Herencia en Java
Semana 3   Herencia en JavaSemana 3   Herencia en Java
Semana 3 Herencia en Java
 
POO-3-Herencia-10-11.pdf
POO-3-Herencia-10-11.pdfPOO-3-Herencia-10-11.pdf
POO-3-Herencia-10-11.pdf
 
JAVA_BASICO_modo_consola_introduccion.pptx
JAVA_BASICO_modo_consola_introduccion.pptxJAVA_BASICO_modo_consola_introduccion.pptx
JAVA_BASICO_modo_consola_introduccion.pptx
 
03 java poo_parte_2
03 java poo_parte_203 java poo_parte_2
03 java poo_parte_2
 
2.android java
2.android   java2.android   java
2.android java
 
9.herencia en java
9.herencia en java9.herencia en java
9.herencia en java
 
Poo
PooPoo
Poo
 
02 python Programación orientada a objetos y funcional
02 python Programación orientada a objetos y funcional02 python Programación orientada a objetos y funcional
02 python Programación orientada a objetos y funcional
 
Lenguajes de Programación: Herencia, Polimorfismo Y UML
Lenguajes de Programación: Herencia, Polimorfismo Y UMLLenguajes de Programación: Herencia, Polimorfismo Y UML
Lenguajes de Programación: Herencia, Polimorfismo Y UML
 
Clasesyobjetos
ClasesyobjetosClasesyobjetos
Clasesyobjetos
 
Clase8 innerclasses
Clase8 innerclassesClase8 innerclasses
Clase8 innerclasses
 
Introducción a la programación y la informática. Tema 5
Introducción a la programación y la informática. Tema 5Introducción a la programación y la informática. Tema 5
Introducción a la programación y la informática. Tema 5
 
3 interfaces clases_abstractas_herencia_polimorfismo
3 interfaces clases_abstractas_herencia_polimorfismo3 interfaces clases_abstractas_herencia_polimorfismo
3 interfaces clases_abstractas_herencia_polimorfismo
 
Herencia y Polimorfismo en Java
Herencia y Polimorfismo en JavaHerencia y Polimorfismo en Java
Herencia y Polimorfismo en Java
 
Metodos 2
Metodos 2Metodos 2
Metodos 2
 
programacion orientada a objetos
programacion orientada a objetosprogramacion orientada a objetos
programacion orientada a objetos
 
Sesion 07 nivel_acceso_miembros_clases
Sesion 07 nivel_acceso_miembros_clasesSesion 07 nivel_acceso_miembros_clases
Sesion 07 nivel_acceso_miembros_clases
 
Java
JavaJava
Java
 
Clases metodos y atributos
Clases metodos y atributosClases metodos y atributos
Clases metodos y atributos
 

More from Whaleejaa Wha (20)

Windows 7
Windows 7Windows 7
Windows 7
 
Windows 7 avanzado
Windows 7 avanzadoWindows 7 avanzado
Windows 7 avanzado
 
Virtualizacion con vm ware
Virtualizacion con vm wareVirtualizacion con vm ware
Virtualizacion con vm ware
 
Unity
UnityUnity
Unity
 
Ubuntu
UbuntuUbuntu
Ubuntu
 
Tecnico windows
Tecnico windowsTecnico windows
Tecnico windows
 
Tecnico hardware desde cero
Tecnico hardware desde ceroTecnico hardware desde cero
Tecnico hardware desde cero
 
Soluciones pc desde cero
Soluciones pc desde ceroSoluciones pc desde cero
Soluciones pc desde cero
 
Silverlight
SilverlightSilverlight
Silverlight
 
Servicio tecnico notebooks
Servicio tecnico notebooksServicio tecnico notebooks
Servicio tecnico notebooks
 
Seguridad pc desde cero
Seguridad pc desde ceroSeguridad pc desde cero
Seguridad pc desde cero
 
Seguridad informatica
Seguridad informaticaSeguridad informatica
Seguridad informatica
 
Routers y switches cisco
Routers y switches ciscoRouters y switches cisco
Routers y switches cisco
 
Robotica
RoboticaRobotica
Robotica
 
Redes wireless
Redes wirelessRedes wireless
Redes wireless
 
Redes wifi
Redes wifiRedes wifi
Redes wifi
 
Proteus vsm
Proteus vsmProteus vsm
Proteus vsm
 
Produccion musical
Produccion musicalProduccion musical
Produccion musical
 
Php avanzado
Php avanzadoPhp avanzado
Php avanzado
 
Overclocking
OverclockingOverclocking
Overclocking
 

Herencia

  • 1. Herencia M.C. Mario Alberto Gómez Rodríguez
  • 2. 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 clases mayor detalle
  • 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. 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. 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. clase SegundoHijo campo primero; campo segundo; campo tercero; campo adicionalSegundoHijoUno; campo adicionalSegundoHijoDos; método haceAlgoUno(){...} clase ExtensionSegundoHijo mé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. 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. 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(); ************************************** Object elMasRapido.clone(); Empleado elMasRapido.toString(); Ejecutivo
  • 9. 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;   } } class Ejecutivo extends Empleado { ... ... ...   public String toString(){  String s = super.toString();         s = s + " Presupuesto: " + presupuesto;         return s;   } }
  • 10. Inicialización de clases derivadas • método constructor • referencia super class 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. Modificadores de acceso ➢public: Todo el mundo puede acceder al elemento. Si es un atributo, todo el mundo puede ver el elemento, es decir, usarlo y asignarlo. Si es un método todo el mundo puede invocarlo. ➢private: Sólo se puede acceder al elemento desde métodos de la clase, o sólo puede invocarse el método desde otro método de la clase. ➢protected: Sus métodos/atributos tienen acceso a nivel de clase, paquete y subclase. ➢sin modificador: Se pueden acceder/invocar sus elementos desde cualquier clase del paquete donde se define la clase.
  • 12. Modificador protected combinación de public y private acceso a clases derivadas y del mismo package class 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. Clase Cualquiera Clase Padre datos y métodos cualesquiera datos y métodos protected datos y métodos private Clase Hija packageEjemploDeProtected datos y métodos de clase hija Clase Padre datos y métodos protected datos y métodos private Clase Hija datos y métodos cualesquiera packageEjemploDeProtected packageEjercicios
  • 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. packageUno packageDos subclase claseA subclaseA claseB claseC Visibilidad de claseA Modificador ClaseA ClaseB SubclaseA claseC public Y Y Y Y protected Y Y Y N sin modficador Y Y N N private Y N N N
  • 16. packageUno packageDos packageTres claseA claseB claseW claseY subClaseZ (hereda de claseC claseD claseX claseZ claseZ) considerar el acceso a campos y métodos (miembros) claseA y claseW tienen miembros públicos claseB, claseY y subClaseZ tienen miembros protected claseC y claseX tienen miembros sin modificador claseD y claseZ tienen miembros private 1- 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. packageUno packageDos packageTres claseA claseB claseW claseY subClaseZ (hereda de claseC claseD claseX claseZ claseZ) considerar el acceso a campos y métodos (miembros) claseA y claseW tienen miembros públicos claseB, claseY y subClaseZ tienen miembros protected claseC y claseX tienen miembros sin modificador claseD y claseZ tienen miembros private 1- claseC puede acceder a claseD ? ... y viceversa ? NO SI 2- claseX puede acceder a claseC ? ... y claseZ ? NO NO 3- claseB puede acceder a claseD ? ... y viceversa ? NO SI 4- claseA puede acceder a claseZ ? ... y viceversa ? NO SI 5- claseY puede acceder a claseZ ? ... y viceversa ? NO SI 6- claseZ puede acceder a claseD ? ... y viceversa ? NO NO 7- claseW puede acceder a claseD ? ... y viceversa ? NO SI 8- claseW puede acceder a claseA ? ... y viceversa ? SI SI 9- clase subClaseZ puede acceder a claseC ? ... y a claseB ? NO NO 10- clase subClaseZ puede acceder a claseD ? ... y a claseW ? NO SI
  • 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 que acelerar() esté en Automovil y se haya especializado en AutomovilCarrera. Up-casting AutomovilCarrera formulaUno = new AutomovilCarrera(); String stringAcelera = formulaUno.acelerar();       //para competir String stringAcelera2 = ((Automovil) formulaUno).acelerar();  //para ciudad ******************************************* Automovil[] arrayAutos = { new Automovil(),  new AutomovilCarrera() }; boolean valorQuitarVolante = arrayAutos[0].quitarVolante(); // ERROR boolean valorQuitarVolante2 = ((AutomovilCarrera)  arrayAutos[1]).quitarVolante(); Down-casting up-casting down-casting
  • 19. Operador cast Conversión de referencias Empleado emp = new Ejecutivo("Jefe principal" , 2000); Ejecutivo ej = (Ejecutivo)emp; // se convierte la referencia de tipo ej.asignarPresupuesto(1500); // correcto ej.asignarSueldo(500); // correcto Empleado emp = new Empleado("Ricardo Castillo" , 2000); Ejecutivo ej = (Ejecutivo)emp; // incorrecto
  • 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. 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. 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. 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. 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. 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( ) ); } }