Está en la página 1de 25

Herencia y Polimorfismo

JCastellanos

Herencia
Objetivos
a) Definir el concepto de herencia entre
clases
b) Interpretar el cdigo fuente de una
aplicacin Java donde aparecen clases
relacionadas mediante la herencia.
c) Construir una aplicacin Java sencilla,
convenientemente especificada, que haga
uso de la herencia entre clases.
JCastellanos

Herencia en el mundo real

Cosa

Medio de telecomunicacin
Medio de
transporte

Objeto de
oficina
Coche
Vehiculo areo

JCastellanos

Definicin Herencia
La herencia es una propiedad que
permite la declaracin de nuevas clases
a partir de otras ya existentes.
Esto proporciona una de las ventajas
principales
de
la
Programacin
Orientada a Objetos.

JCastellanos

Definicin Herencia
La reutilizacin de cdigo previamente
desarrollado ya que permite a una
clase ms especfica incorporar la
estructura y comportamiento de una
clase ms general.

JCastellanos

Herencia
En otras palabras:
La idea bsica es poder crear clases
basadas en clases ya existentes.
Cuando heredamos de una clase
existente, estamos re-usando cdigo
(mtodos y campos).
Podemos agregar mtodos y variables
para adaptar la clase a la nueva situacin.
JCastellanos

Herencia
La herencia la identificamos cuando
encontramos la relacin es-un entre la
nueva clase y la ya existente. Un
estudiante es una persona.
La clase ya existente se le llama
superclase, clase base , o clase padre.
A la nueva clase se le llama subclase,
clase derivada, o clase hija.
JCastellanos

Herencia
De hecho, en Java, todas las clases
deben derivar de alguna clase. (Object)
Cuando una clase B se construye a partir
de otra A mediante la herencia, la clase B
hereda todos los atributos, mtodos y
clases internas de la clase A. Adems la
clase B puede redefinir los componentes
heredados y aadir atributos, mtodos y
clases internas especficas
JCastellanos

Herencia
Para indicar que la clase B (clase
descendiente, derivada, hija o subclase)
hereda de la clase A (clase ascendiente,
heredada, padre, base o superclase) se
emplea la palabra reservada extends en
la cabecera de la declaracin de la clase
descendiente. La sintaxis es la siguiente:

JCastellanos

Herencia en Java
Java permite definir una
clase como subclase de
una clase padre.
class clase_hija extends clase_padre
{
..........
}

JCastellanos

Clase Padre

Clase Hija

10

HERENCIA Clases y
superclases

JCastellanos

11

Herencia

JCastellanos

12

Herencia
En este diagrama:
La clase Empleado es la superclase de Director, Comercial e Informtico.
Las clases Director, Comercial e Informtico son subclases de la
clase Empleado.
La clase Director es la superclase de Ejecutivo.
La clase Ejecutivo es la subclase de Director.
Las subclases heredan todos los mtodos y atributos de sus superclases.
Por tanto, al definir una subclase, esta tiene automticamente el mismo
comportamiento que la superclase que hereda. Y se debe tener en cuenta
que esta herencia sube en la jerarqua hasta llegar a la cumbre.

JCastellanos

13

Herencia

Existe una raz en esta jerarqua, que es la clase Object. Todas las
clases creadas heredan las caractersticas y el comportamiento
de Object.
JCastellanos

14

Constructores

El objetivo del constructor es el de inicializar un objeto cuando ste es


creado. Asignaremos los valores iniciales as como los procesos que sta
clase deba realizar.

Se utiliza para crear tablas de mtodos virtuales y poder as desarrollar


el polimorfismo, una de las herramientas de la programacin orientada a
objetos (POO). Al utilizar un constructor, el compilador determina cual de
los objetos va a responder al mensaje (virtual) que hemos creado. Tiene un
tipo de acceso, un nombre y un parntesis.

En java es un mtodo especial dentro de una clase, que se llama


automticamente cada vez que se crea un objeto de esa clase.

JCastellanos

15

Constructores
Un constructor se llama igual que la clase.
No devuelve nada, ni siquiera void.
Pueden existir varios, pero siguiendo las reglas de la
sobrecarga de funciones.
De entre los que existan, tan slo uno se ejecutar al
crear un objeto de la clase.
Dentro del cdigo de un constructor generalmente
suele existir inicializaciones de variables y objetos,
para conseguir que el objeto sea creado con dichos
valores iniciales.
JCastellanos

16

Constructores
Constructor por defecto
Un constructor por defecto es un constructor sin parmetros que no hace nada.
Sin embargo ser invocado cada vez que se construya un objeto sin
especificar ningn argumento, en cuyo caso el objeto ser iniciado con los
valores predeterminados por el sistema (los atributos numricos a ceros,
los alfanumricos a nulos, y las referencias a objetos a null).

Para definir los constructores se emplea la


siguiente sintaxis:
[modifVisibilidad] nombreConstructor (listaParmetros) [throws listaExcepciones]

{
}
JCastellanos

17

Lab 1 Constructores
public class Arboles {
public Arboles() {
System.out.println("Un rbol genrico"); }
public Arboles(String tipo) {
System.out.println("Un rbol tipo " + tipo); }
public Arboles(int altura) {
System.out.println("Un rbol de " + altura + " metros"); }
public Arboles(int altura,String tipo) {
System.out.println("Un " + tipo + " de " + altura + " metros"); }
public static void main(String args[]) {
}

JCastellanos

18

Constructores
public class TestArboles {
public static void main(String args[]) {
Arboles arbol1 = new Arboles(4);
Arboles arbol2 = new Arboles("Roble");
Arboles arbol3 = new Arboles();
Arboles arbol4 = new Arboles(5,"Pino");
}}

JCastellanos

19

Constructores y Herencia
Cuando se declara un objeto de una clase
derivada, se ejecutan los constructores
siguiendo el orden de derivacin, es decir,
primero el de la clase base, y despus los
constructores de las clases derivadas de arriba
a abajo.
Para pasar parmetros al constructor de la
clase padre:
super (para1, para2, ..., paraN)
JCastellanos

20

class Humano {
protected String nombre;
protected String apellido;

Lab 2

public Humano(String nombre, String apellido) {


this.nombre = nombre;
this.apellido = apellido;
}
/* el this es un apuntador al objeto mismo. Y se emplea para evitar ambigedades,
porque en el mtodo constructor que usas sirve para diferenciar el atributo de la
clase, del atributo que entra como parmetro. */
public String nombreCompleto() {
return this.apellido + ", " + this.nombre;
}
public String identificacion() {
return this.nombreCompleto();
}
}
JCastellanos

21

class Ciudadano extends Humano {


protected String documento;
public Ciudadano(String nombre,String apellido, String
documento) { super(nombre,apellido);
this.documento = documento; }
//super( ) llama al constructor de la clase de la que se hereda (extends).
public String identificacion() {
return super.identificacion() + ", documento: " +
this.documento;
}
public String getDocumento(){
return documento; }
}
JCastellanos

22

public class Herencia {


public static void main (String args[ ])
{
Humano a = new Humano("Emilio","Rosso");
Ciudadano b = new
Ciudadano("Emilio","Rosso","3052454545");
System.out.println(a.nombreCompleto());
System.out.println(b.identificacion());
System.out.println(b.getDocumento());
// System.out.println(a.getDocumento());
/* no es posible acceder a un miembro de la clase hija usando una
referencia u objeto de la clase padre*/
}
}

JCastellanos

23

Lab 3

JCastellanos

24

JCastellanos

25

También podría gustarte