Herencia
• La herencia nos permite derivar una
  nueva clase a partir de una existente
• La clase existente es conocida como
  clase madre, o superclase, o clase
  base
• La clase derivada también es conocida
  como clase hija o subclase.




La herencia es la columna vertebral de la POO. Permite a los programadores crear
una jerarquía entre un grupo de clases que tienen características similares.
La herencia es una forma de reutilización de código.
Herencia en Java
• Como su nombre lo implica, la clase hija hereda




                                                             Mamifero

                                                                        Animal
  características de la clase madre.




                                                      Gato
• Esto es, la clase hija hereda los métodos y datos
  definidos para la clase madre.
• Para ajustar una clase derivada, el programador
  puede agregar nuevos datos y/o métodos, o
  puede modificar los heredados.
    class Animal
      comer()
      dormir()
      reproducirse()                     Gato Gardfield
      class Mamifero                       comer()
        reproducirse()                     reproducirse()
         class Gato                        dormir()
           dormir()                        cazarRaton()
           cazarRaton()                    maullar()
           maullar()
Herencia Simple vs. Herencia
•Múltiple herencia múltiple
  Java no soporta
   – Todas las clases en Java descienden de la clase Object. La clase
     Object no tiene una superclase
• Podemos forzar a que las clases, que no están relacionadas por la herencia,
  implementen un conjunto de métodos mediante el uso de interfaces.
Declarando una subclase
•En java usamos la palabra reservada extends para establecer una



•Sintáxis:
[




                                                     Mamifero

                                                                Animal
                                              Gato
                                       Mamífero es un tipo de Animal
                                       Gato es un tipo de Mamifero
Declarando una subclase
                     public class Animal {
                       public void comunicar() {
                         System.out.println(“Animal generico");
                       }
                     }




public class Can extends Animal {
  public void comunicar() {
    System.out.println("Woof!!");
  }
}



                                    public class Gato extends Animal {
                                      public void comunicar() {
                                        System.out.println(“Meow!!");
                                      }
                                    }
Redefiniendo (overriding) Métodos
 • Cuando una clase derivada define un método con el mismo
   nombre y firma que un método de su clase base, decimos que la
   versión de la clase derivada redefine la versión de la clase.
 • El nuevo método debe tener la misma firma que el método de la
   clase base, pero puede tener diferente cuerpo.
 • El tipo del objeto que esté en ejecución determinará cuál
   versión de método será el invocado.


             class Animal
Redefinición   comer()
               dormir()
               reproducirse()                 Gato Gardfield
               class Mamifero                   comer()
                 reproducirse()                 reproducirse()
                class Gato                      dormir()
                  dormir()                      cazarRaton()
                  cazarRaton()                  maullar()
                  maullar()
Overloading vs. Overriding
 Overloading deals with Overriding deals with
  multiples methods in  two methods, one in a
the same class with the parent class and one in
    same name but       a child class, that have
  different signatures    the same signature


 Overloading lets you     Overriding lets you
   define a similar        define a similar
 operation in different  operation in different
ways for different data ways for different object
                                 types
Overloading vs. Overriding
                          Inheritance

                   superclass       Method(x)


            Method(x)               Method(x)
subclass                                          …
                                    Method(x,y)

           Sub-subclass         …          …

     Polymophism: Override, Overload
Práctica de Herencia (1)
Diseña e implementa un conjunto de clases que definan la jerarquía de clases mostrada en la
    figura, haciendo lo siguiente:
Define cada clase tomando en cuenta las características (velocidad, potencia, número de
    pasajeros, costo, consumo de combustible, etc.)
Imprime mensajes apropiados que describan la funcionalidad (obtener velocidad, obtener potencia,
    calcular tiempo de recorrido, etc).
Usa los constructores apropiados de forma que una clase derivada invoque al constructor de su
    clase base.
Crea una clase que use las instancias de la jerarquía de clases.

Herencia - Programación Orientada a Objetos

  • 1.
    Herencia • La herencianos permite derivar una nueva clase a partir de una existente • La clase existente es conocida como clase madre, o superclase, o clase base • La clase derivada también es conocida como clase hija o subclase. La herencia es la columna vertebral de la POO. Permite a los programadores crear una jerarquía entre un grupo de clases que tienen características similares. La herencia es una forma de reutilización de código.
  • 2.
    Herencia en Java •Como su nombre lo implica, la clase hija hereda Mamifero Animal características de la clase madre. Gato • Esto es, la clase hija hereda los métodos y datos definidos para la clase madre. • Para ajustar una clase derivada, el programador puede agregar nuevos datos y/o métodos, o puede modificar los heredados. class Animal comer() dormir() reproducirse() Gato Gardfield class Mamifero comer() reproducirse() reproducirse() class Gato dormir() dormir() cazarRaton() cazarRaton() maullar() maullar()
  • 3.
    Herencia Simple vs.Herencia •Múltiple herencia múltiple Java no soporta – Todas las clases en Java descienden de la clase Object. La clase Object no tiene una superclase • Podemos forzar a que las clases, que no están relacionadas por la herencia, implementen un conjunto de métodos mediante el uso de interfaces.
  • 4.
    Declarando una subclase •Enjava usamos la palabra reservada extends para establecer una •Sintáxis: [ Mamifero Animal Gato Mamífero es un tipo de Animal Gato es un tipo de Mamifero
  • 5.
    Declarando una subclase public class Animal { public void comunicar() { System.out.println(“Animal generico"); } } public class Can extends Animal { public void comunicar() { System.out.println("Woof!!"); } } public class Gato extends Animal { public void comunicar() { System.out.println(“Meow!!"); } }
  • 6.
    Redefiniendo (overriding) Métodos • Cuando una clase derivada define un método con el mismo nombre y firma que un método de su clase base, decimos que la versión de la clase derivada redefine la versión de la clase. • El nuevo método debe tener la misma firma que el método de la clase base, pero puede tener diferente cuerpo. • El tipo del objeto que esté en ejecución determinará cuál versión de método será el invocado. class Animal Redefinición comer() dormir() reproducirse() Gato Gardfield class Mamifero comer() reproducirse() reproducirse() class Gato dormir() dormir() cazarRaton() cazarRaton() maullar() maullar()
  • 7.
    Overloading vs. Overriding Overloading deals with Overriding deals with multiples methods in two methods, one in a the same class with the parent class and one in same name but a child class, that have different signatures the same signature Overloading lets you Overriding lets you define a similar define a similar operation in different operation in different ways for different data ways for different object types
  • 8.
    Overloading vs. Overriding Inheritance superclass Method(x) Method(x) Method(x) subclass … Method(x,y) Sub-subclass … … Polymophism: Override, Overload
  • 9.
    Práctica de Herencia(1) Diseña e implementa un conjunto de clases que definan la jerarquía de clases mostrada en la figura, haciendo lo siguiente: Define cada clase tomando en cuenta las características (velocidad, potencia, número de pasajeros, costo, consumo de combustible, etc.) Imprime mensajes apropiados que describan la funcionalidad (obtener velocidad, obtener potencia, calcular tiempo de recorrido, etc). Usa los constructores apropiados de forma que una clase derivada invoque al constructor de su clase base. Crea una clase que use las instancias de la jerarquía de clases.