Sei sulla pagina 1di 0

Curso: "Programacin Java SE" 2013

POO: Herencia de clases


Mdulo 5 / parte 1

Todos los logos y marcas utilizados en este
documento, estn registrados y pertenecen a
sus respectivos dueos.
AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Herencia 1

Curso: "Programacin Java SE" 2013

Introduccin
Las clases no estn aisladas, sino que se relacionan entre s, formando una jerarqua de clasificacin. Los
objetos heredan las propiedades y el comportamiento de todas las clases a las que pertenecen. La
herencia organiza y facilita el polimorfismo y el encapsulamiento permitiendo a los objetos ser definidos
y creados como tipos especializados de objetos preexistentes. Estos pueden compartir (y extender) su
comportamiento sin tener que volver a implementarlo. Esto suele hacerse habitualmente agrupando los
objetos en clases y estas en rboles o enrejados que reflejan un comportamiento comn.
La Herencia es uno de los ms importantes conceptos y caractersticas de la Programacin Orientada a
Objetos, una de las bases de las abstracciones y polimorfismo. Bsicamente permite reusar cdigo desde
una clase hija, heredando atributos y mtodos definidos en la clase padre o sper clase, siempre y
cuando haya una relacin de parentesco entre ambas entidades.
En Java, todas las clases tienen una superclase. Si no se especifica una superclase para una clase, se
asume que es la clase Object. La clase Object define el estado bsico y el comportamiento que todos los
objetos deben tener como habilidad para comparar unos objetos con otros, para convertir una cadena
etc.

AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Herencia 2

Curso: "Programacin Java SE" 2013

Objetivo
El objetivo de esta prctica de laboratorio es exponer los conceptos que hay detrs de la herencia de
clases. Aprenderemos a crear clases que hereden o extienden de otra clase, tambin veremos la sobre-
escritura de mtodos, donde una clase hija remplaza o modifica el mtodo de la sper clase o padre.
Finalmente aprenderemos a usar las clases final y el mtodo final.
AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Herencia 3

Curso: "Programacin Java SE" 2013


Ejercicio 1: Creando nuestra primera Clase Java Estudiante
1. Abrir Netbeans IDE
2. Crear un proyecto Netbeans: Java Application
Seleccionar File desde el men superior y seleccionar New Project.
Observar que aparece la ventana de dialogo New Project.
Seleccionar Java bajo Categories, y Seleccionar Java Application bajo la seccin
Projects.
Clic Next.

AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Herencia 4

Curso: "Programacin Java SE" 2013


Bajo el panel Name and Location, para el Nombre del Proyecto (Project Name), ingrese
ProyectoElemploPersonas. Este es el nombre que se le dar al proyecto.
Para el campo Create Main Class, ingresar ElemploPersonas. (Figura de abajo) Esto es
para generar la clase autnoma ElemploPersonas.java, que contendr el mtodo
main(..) que ser generado por Netbeans.
Clic Finish.
AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Herencia 5

Curso: "Programacin Java SE" 2013


Observe que el proyecto ProyectoElemploPersonas y ha sido creado bajo la pestaa
Projects de NetBeans IDE y adems ha generado automticamente la clase
ElemploPersonas.java la cual es desplegada en el editor de cdigo del IDE.


AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Herencia 6

Curso: "Programacin Java SE" 2013

3. Creando la clase java Persona:
Clic derecho en el proyecto ProyectoElemploPersonas y seleccionamos New->Java
Class.

Observe que aparece la ventana para crear una clase Java: New Java Class
Para el nombre de la case (Class Name), ingrese Persona
Clic Finish.
AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Herencia 7

Curso: "Programacin Java SE" 2013


Observe que se crea la clase Persona.java y es desplegada en el editor de cdigo del
IDE.
Modifique la clase Persona.java como se muestra en el Cdigo de abajo, poner especial
atencin en los atributos nombre, apellido y direccin con sus respectivos mtodos
getter/setter.
/**
*
* @author Andrs Guzmn
*/
public class Persona {

private String nombre;

private String apellido;

private String direccion;

public String getApellido() {
return apellido;
}

public void setApellido(String apellido) {
this.apellido = apellido;
}
AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Herencia 8

Curso: "Programacin Java SE" 2013


public String getDireccion() {
return direccion;
}

public void setDireccion(String direccion) {
this.direccion = direccion;
}

public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}
}

4. Creando la clase java Estudiante:
Clic derecho en el proyecto ProyectoElemploPersonas y seleccionamos New->Java
Class.
Observe que aparece la ventana para crear una clase Java: New Java Class
Para el nombre de la case (Class Name), ingrese Estudiante
Clic Finish.

AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Herencia 9

Curso: "Programacin Java SE" 2013

Observe que se crea la clase Estudiante.java y es desplegada en el editor de cdigo del
IDE.
Modifique la clase Estudiante.java como se muestra en el Cdigo de abajo, poner
especial atencin en los atributos del estudiante institucin y promedio con sus
respectivos mtodos getter/setter.
/**
*
* @author Andrs Guzmn
*/
public class Estudiante extends Persona {
private String institucion;

private double promedio;

public String getInstitucion() {
return institucion;
}

public void setInstitucion(String institucion) {
this.institucion = institucion;
}

public double getPromedio() {
return promedio;
}

public void setPromedio(double promedio) {
this.promedio = promedio;
}
}

5. Creando la clase java EstudianteInternacional:
Clic derecho en el proyecto ProyectoElemploPersonas y seleccionamos New->Java
Class.
Observe que aparece la ventana para crear una clase Java: New Java Class
Para el nombre de la case (Class Name), ingrese EstudianteInternacional
Clic Finish.
AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Herencia 10

Curso: "Programacin Java SE" 2013


Observe que se crea la clase EstudianteInternacional.java y es desplegada en el editor
de cdigo del IDE.
Modifique la clase EstudianteInternacional.java como se muestra en el Cdigo de abajo,
poner especial atencin en el atributo pais con sus respectivos mtodos getter/setter.
public class EstudianteInternacional extends Estudiante {

private String pais;

public String getPais() {
return pais;
}

public void setPais(String pais) {
this.pais = pais;
}
}


AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Herencia 11

Curso: "Programacin Java SE" 2013

6. Creando la clase java Profesor:
Clic derecho en el proyecto ProyectoElemploPersonas y seleccionamos New->Java
Class.
Observe que aparece la ventana para crear una clase Java: New Java Class
Para el nombre de la case (Class Name), ingrese Profesor
Clic Finish.


AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Herencia 12

Curso: "Programacin Java SE" 2013

Observe que se crea la clase Profesor.java y es desplegada en el editor de cdigo del
IDE.
Modifique la clase Profesor.java como se muestra en el Cdigo de abajo, poner especial
atencin en el atributo tituloAcademico con sus respectivos mtodos getter/setter.
/**
*
* @author Andrs Guzmn
*/
public class Profesor extends Persona {

private String tituloAcademico;

public String getTituloAcademico() {
return tituloAcademico;
}

public void setTituloAcademico(String tituloAcademico) {
this.tituloAcademico = tituloAcademico;
}
}

7. Modificar el contenido generado por el IDE en la clase ElemploPersonas.java.
Modifique la clase ElemploPersonas.java como se muestra en el Cdigo de abajo, poner
especial atencin en los comentarios resaltados con negrita.
/**
* @author Andrs Guzmn
*/
public class ElemploPersonas {
public static void main(String[] args) {
// Creamos objetos instancias y asignamos los datos por setter.
// Notamos que podemos usar los mtodos definidos en las superclases
// en los objetos instancias hijas

Persona persona1 = new Persona();
persona1.setNombre("Bruce");
persona1.setApellido("Lee");

Estudiante estudiante1 = new Estudiante();
estudiante1.setNombre("John");
estudiante1.setApellido("Doe");
estudiante1.setInstitucion("Universidad Estatal I");

EstudianteInternacional estInt = new EstudianteInternacional();
estInt.setNombre("James");
estInt.setInstitucion("Universidad Estatal I");
estInt.setPais("USA");

Profesor prof = new Profesor();
prof.setNombre("Andrs");
persona1.setApellido("Guzmn");
prof.setTituloAcademico("Java EE");

AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Herencia 13

Curso: "Programacin Java SE" 2013

// Imprimir los nombres de todos los objetos instancias usando el mtodo
// getNombre() definido en la clase Persona.
System.out.println("Imprimir los nombres de todos los objetos instancias...");
System.out.println(" persona1.getNombre() = " + persona1.getNombre());
System.out.println(" estudiante1.getNombre() = " + estudiante1.getNombre());
System.out.println(" estInt.getNombre() = " + estInt.getNombre());
System.out.println(" prof.getNombre() = " + prof.getNombre());
}
}

8. Construir y ejecutar el programa
Clic derecho del mouse sobre el proyecto ProyectoElemploPersonas y seleccionar Run
Observe el resultado en la salida de consola (Tab Output):





9. Obtener las clases de la jerarqua a travs del mtodo getSuperclass() de la clase Class
Modifique la clase ElemploPersonas.java como se muestra en el Cdigo de abajo, poner
especial atencin en los cdigos agregados resaltados con negrita y azul.
/**
* @author Andrs Guzmn
*/
public class ElemploPersonas {
public static void main(String[] args) {
// Creamos objetos instancias y asignamos los datos por setter.
// Notamos que podemos usar los mtodos definidos en las superclases
// en los objetos instancias hijas

Persona persona1 = new Persona();
persona1.setNombre("Bruce");
persona1.setApellido("Lee");

Estudiante estudiante1 = new Estudiante();
estudiante1.setNombre("John");
estudiante1.setApellido("Doe");
estudiante1.setInstitucion("Universidad Estatal I");

EstudianteInternacional estInt = new EstudianteInternacional();
estInt.setNombre("James");
estInt.setInstitucion("Universidad Estatal I");
estInt.setPais("USA");

Profesor prof = new Profesor();
prof.setNombre("Andrs");
run:
Imprimir los nombres de todos los objetos instancias...
persona1.getNombre() = Bruce
estudiante1.getNombre() = John
estInt.getNombre() = James
prof.getNombre() = Andrs
BUILD SUCCESSFUL (total time: 1 second)
AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Herencia 14

Curso: "Programacin Java SE" 2013

persona1.setApellido("Guzmn");
prof.setTituloAcademico("Java EE");

// Imprimir los nombres de todos los objetos instancias usando el mtodo
// getNombre() definido en la clase Persona.
System.out.println("Imprimir los nombres de todos los objetos instancias...");
System.out.println(" persona1.getNombre() = " + persona1.getNombre());
System.out.println(" estudiante1.getNombre() = " + estudiante1.getNombre());
System.out.println(" estInt.getNombre() = " + estInt.getNombre());
System.out.println(" prof.getNombre() = " + prof.getNombre());

// Imprimir las clases de la jerarqua de la clase EstudianteInternacional
// a traves del mtodo getSuperclass() de la clase Class.
Class class1 = estInt.getClass();

System.out.println("Imprimir las clases de la jerarqua de la clase EstudianteInternacional...");
while (class1.getSuperclass() != null){
String child = class1.getName();
String parent = class1.getSuperclass().getName();
System.out.println(" " + child + " clase es hija de la clase " + parent);
class1 = class1.getSuperclass();
}
}
}

Clic derecho del mouse sobre el proyecto ProyectoElemploPersonas y seleccionar Run
Observe el resultado en la salida de consola (Tab Output):
run:
Imprimir los nombres de todos los objetos instancias...
persona1.getNombre() = Bruce
estudiante1.getNombre() = John
estInt.getNombre() = James
prof.getNombre() = Andrs
Imprimir las clases de la jerarqua de la clase EstudianteInternacional...
EstudianteInternacional clase es hija de la clase Estudiante
Estudiante clase es hija de la clase Persona
Persona clase es hija de la clase java.lang.Object
BUILD SUCCESSFUL (total time: 0 seconds)


AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Herencia 15

Curso: "Programacin Java SE" 2013

Ejercicio 2: Llamando a los constructores en cadena
1. Clic derecho del mouse sobre el proyecto ProyectoElemploPersonas y selecciona Copy
2. Renombrar nueva copia a ProyectoElemploPersonasConstructor.

3. En el campo Proyect Name ingresar ProyectoElemploPersonasConstructor.
4. Clic en Copy
AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Herencia 16

Curso: "Programacin Java SE" 2013


5. Observe que el proyecto ProyectoElemploPersonasConstructor y ha sido creado bajo la pestaa
Projects de NetBeans IDE.
6. Modificamos la clase Persona.java, como se muestra en el cdigo de abajo, poner especial
atencin en los cdigos agregados resaltados con negrita y azul.
public class Persona {

private String nombre;
private String apellido;
private String direccion;

public Persona() {
System.out.println("Persona: constructor inicializado");
}

public String getApellido() {
return apellido;
}

public void setApellido(String apellido) {
this.apellido = apellido;
}

public String getDireccion() {
return direccion;
}

public void setDireccion(String direccion) {
this.direccion = direccion;
}

AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Herencia 17

Curso: "Programacin Java SE" 2013

public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}
}

7. Modificamos la clase Estudiante.java, como se muestra en el cdigo de abajo, poner especial
atencin en los cdigos agregados resaltados con negrita y azul.
public class Estudiante extends Persona {

private String institucion;
private double promedio;

public Estudiante() {
System.out.println("Estudiante: constructor inicializado");
}

public String getInstitucion() {
return institucion;
}

public void setInstitucion(String institucion) {
this.institucion = institucion;
}

public double getPromedio() {
return promedio;
}

public void setPromedio(double promedio) {
this.promedio = promedio;
}
}

8. Modificamos la clase EstudianteInternacional.java, como se muestra en el cdigo de abajo,
poner especial atencin en los cdigos agregados resaltados con negrita y azul.
public class EstudianteInternacional extends Estudiante{

private String pais;

public EstudianteInternacional() {
System.out.println("EstudianteInternacional: constructor inicializado");
}

public String getPais() {
return pais;
}

AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Herencia 18

Curso: "Programacin Java SE" 2013

public void setPais(String pais) {
this.pais = pais;
}
}

9. Modificamos la clase Profesor.java, como se muestra en el cdigo de abajo, poner especial
atencin en los cdigos agregados resaltados con negrita y azul.
public class Profesor extends Persona {

private String tituloAcademico;

public Profesor() {
System.out.println("Profesor: constructor inicializado");
}

public String getTituloAcademico() {
return tituloAcademico;
}

public void setTituloAcademico(String tituloAcademico) {
this.tituloAcademico = tituloAcademico;
}
}

10. Modificamos la clase ElemploPersonas.java, como se muestra en el cdigo de abajo, poner
especial atencin en los cdigos agregados resaltados con negrita y azul.
public class ElemploPersonas {

public static void main(String[] args) {
// Creamos un objeto instancias de EstudianteInternacional.
System.out.println("---- Creamos un objeto instancias de EstudianteInternacional...");
EstudianteInternacional estInt = new EstudianteInternacional();

// Creamos un objeto instancias de Profesor.
System.out.println("---- Creamos un objeto instancias de Profesor...");
Profesor prof = new Profesor();
}
}
11. Clic derecho del mouse sobre el proyecto ProyectoElemploPersonasConstructor y seleccionar
Run, observe el resultado en la salida de consola (Tab Output):
---- Creamos un objeto instancias de EstudianteInternacional...
Persona: constructor inicializado
Estudiante: constructor inicializado
EstudianteInternacional: constructor inicializado
---- Creamos un objeto instancias de Profesor...
Persona: constructor inicializado
Profesor: constructor inicializado

AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Herencia 19

Curso: "Programacin Java SE" 2013

Ejercicio 3: La referencia super
1. Clic derecho del mouse sobre el proyecto ProyectoElemploPersonas y selecciona Copy
2. Renombrar nueva copia a ProyectoElemploPersonasConstructorSuper.

3. En el campo Proyect Name ingresar ProyectoElemploPersonasConstructorSuper.
4. Clic en Copy
AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Herencia 20

Curso: "Programacin Java SE" 2013


5. Observe que el proyecto ProyectoElemploPersonasConstructorSuper y ha sido creado bajo la
pestaa Projects de NetBeans IDE.
6. Modificamos la clase Persona.java, como se muestra en el cdigo de abajo, poner especial
atencin en los cdigos agregados resaltados con negrita y azul.
public class Persona {

private String nombre;

private String apellido;

private String direccion;

public Persona(String nombre) {
this.nombre = nombre;
}

public String getApellido() {
return apellido;
}

public void setApellido(String apellido) {
this.apellido = apellido;
}

public String getDireccion() {
return direccion;
}

public void setDireccion(String direccion) {
this.direccion = direccion;
AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Herencia 21

Curso: "Programacin Java SE" 2013

}

public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}
}

7. Modificamos la clase Estudiante.java, como se muestra en el cdigo de abajo, poner especial
atencin en los cdigos agregados resaltados con negrita y azul.
public class Estudiante extends Persona {

private String institucion;
private double promedio;

public Estudiante(String nombre, String institucion, double promedio) {
super(nombre);
this.institucion = institucion;
this.promedio = promedio;
}

public String getInstitucion() {
return institucion;
}

public void setInstitucion(String institucion) {
this.institucion = institucion;
}

public double getPromedio() {
return promedio;
}

public void setPromedio(double promedio) {
this.promedio = promedio;
}
}

El cambio es llamar al constructor de la superclase utilizando el mtodo super (), para
inicializar el nombre en Persona.

AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Herencia 22

Curso: "Programacin Java SE" 2013

8. Modificamos la clase EstudianteInternacional.java, como se muestra en el cdigo de abajo,
poner especial atencin en los cdigos agregados resaltados con negrita y azul.
public class EstudianteInternacional extends Estudiante{

private String pais;

public EstudianteInternacional(String nombre, String institucion, double promedio, String pais) {
super(nombre, institucion, promedio);
this.pais = pais;
}

public String getPais() {
return pais;
}

public void setPais(String pais) {
this.pais = pais;
}
}

El cambio es llamar al constructor de la superclase utilizando el mtodo super (), para
inicializar el nombre, institucin y promedio en Estudiante.

9. Modificamos la clase Profesor.java, como se muestra en el cdigo de abajo, poner especial
atencin en los cdigos agregados resaltados con negrita y azul.
public class Profesor extends Persona {

private String tituloAcademico;

public Profesor(String nombre, String tituloAcademico) {
super(nombre);
this.tituloAcademico = tituloAcademico;
}

public String getTituloAcademico() {
return tituloAcademico;
}

public void setTituloAcademico(String tituloAcademico) {
this.tituloAcademico = tituloAcademico;
}
}

El cambio es llamar al constructor de la superclase utilizando el mtodo super (), para
inicializar el nombre en Persona.

AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Herencia 23

Curso: "Programacin Java SE" 2013

10. Modificamos la clase ElemploPersonas.java, como se muestra en el cdigo de abajo, poner
especial atencin en los cdigos agregados resaltados con negrita y azul.
/**
* @author Andrs Guzmn
*/
public class ElemploPersonas {

public static void main(String[] args) {

// Creamos un objeto instancias de la clase EstudianteInternacional.
System.out.println("---- Creamos un objeto instancias de la clase EstudianteInternacional...");

EstudianteInternacional estInt =
new EstudianteInternacional("John Doe", // Nombre
"Universidad TI", // Institucin
6.5, // Promedio
"Chile"); // Pas

System.out.println("estInt.getNombre() = " + estInt.getNombre());
System.out.println("estInt.getInstitucion() = " + estInt.getInstitucion());
System.out.println("estInt.getPromedio() = " + estInt.getPromedio());
System.out.println("estInt.getPais() = " + estInt.getPais()); }
}

11. Clic derecho del mouse sobre el proyecto ProyectoElemploPersonasConstructorSuper y
seleccionar Run, observe el resultado en la salida de consola (Tab Output):
run:
---- Creamos un objeto instancias de la clase EstudianteInternacional...
estInt.getNombre() = John Doe
estInt.getInstitucion() = Universidad TI
estInt.getPromedio() = 6.5
estInt.getPais() = Chile
BUILD SUCCESSFUL (total time: 0 seconds)



AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Herencia 24

Curso: "Programacin Java SE" 2013

Ejercicio 4: Sobre escritura de mtodos en la herencia, la clase hija reemplaza un mtodo del padre
o superclase.
Una clase puede sobrescribir un mtodo de sus superclases.
El mtodo que sobrescribe debe tener el mismo, nombre, tipo de retorno y lista de parmetros
que el mtodo al que ha sobrescrito
La sobrescritura de mtodos es algo bastante comn en mecanismos de herencia, puesto que
los mtodos que fueron creados para una clase "padre" no tienen por qu ser los mismos que
los definidos en las clases que heredan.
Polimorfismo puro, comportamientos diferentes, asociados a objetos distintos.

1. Clic derecho del mouse sobre el proyecto ProyectoElemploPersonasConstructorSuper y
selecciona Copy
2. Renombrar nueva copia a ProyectoElemploPersonasSobreEscritura.
3. En el campo Proyect Name ingresar ProyectoElemploPersonasSobreEscritura.
4. Clic en Copy

5. Observe que el proyecto ProyectoElemploPersonasSobreEscritura y ha sido creado bajo la
pestaa Projects de NetBeans IDE.

AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Herencia 25

Curso: "Programacin Java SE" 2013

6. Modificamos la clase Persona.java, como se muestra en el cdigo de abajo, poner especial
atencin en los cdigos agregados resaltados con negrita y azul.
public class Persona {

private String nombre;

private String apellido;

private String direccion;

public Persona(String nombre) {
this.nombre = nombre;
}

public String getApellido() {
return apellido;
}

public void setApellido(String apellido) {
this.apellido = apellido;
}

public String getDireccion() {
return direccion;
}

public void setDireccion(String direccion) {
this.direccion = direccion;
}

public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

// Un mtodo que ser sobre-escrito o reemplazado por la clase hija (sub-clase)
public void unImportanteMetodo(String t){
System.out.println("unImportanteMetodo(" + t + ") en la clase Persona");
}
}


AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Herencia 26

Curso: "Programacin Java SE" 2013

7. Modificamos la clase Estudiante.java, como se muestra en el cdigo de abajo, poner especial
atencin en los cdigos agregados resaltados con negrita y azul.
public class Estudiante extends Persona {

private String institucion;
private double promedio;

public Estudiante(String nombre, String institucion, double promedio) {
super(nombre);
this.institucion = institucion;
this.promedio = promedio;
}

public String getInstitucion() {
return institucion;
}

public void setInstitucion(String institucion) {
this.institucion = institucion;
}

public double getPromedio() {
return promedio;
}

public void setPromedio(double promedio) {
this.promedio = promedio;
}

// Sobre-escribe el mtodo de la clase padre Persona
@Override
public void unImportanteMetodo(String t){
System.out.println("unImportanteMetodo(" + t + ") en la clase Estudiante");
}
}

Reemplaza el comportamiento del mtodo unImportanteMetodo(String t) de la clase
padre, permite polimorfismo, diferentes formas de implementar el mismo
comportamiento en una jerarqua de clases.


AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Herencia 27

Curso: "Programacin Java SE" 2013

8. Modificamos la clase EstudianteInternacional.java, como se muestra en el cdigo de abajo,
poner especial atencin en los cdigos agregados resaltados con negrita y azul.
public class EstudianteInternacional extends Estudiante{

private String pais;

public EstudianteInternacional(String nombre, String institucion, double promedio, String pais) {
super(nombre, institucion, promedio);
this.pais = pais;
}

public String getPais() {
return pais;
}

public void setPais(String pais) {
this.pais = pais;
}

// Sobre-escribe el mtodo de la clase padre Estudiante
@Override
public void unImportanteMetodo(String t){
System.out.println("unImportanteMetodo(" + t + ") en la clase EstudianteInternacional");
}
}

Sobre-escribe el mtodo de la clase padre Estudiante.

9. Modificamos la clase ElemploPersonas.java, como se muestra en el cdigo de abajo, poner
especial atencin en los cdigos agregados resaltados con negrita y azul.
public class ElemploPersonas {

public static void main(String[] args) {

// Mismo mtodo o comportamiento que se implementa de diferentes formas en cada clase.
System.out.println("---- Observe como cambia el comportamiento al sobre-escribir el mtodo ----");

Persona persona1 = new Persona("John");
persona1.unImportanteMetodo("test1");

Estudiante est1 = new Estudiante("Fulano", "Instituto N1", 5.0);
est1.unImportanteMetodo("test2");

EstudianteInternacional estInt = new EstudianteInternacional("Fulano", "Instituto N2", 5.5, "Chile");
estInt.unImportanteMetodo("test3");
}
}


AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Herencia 28

Curso: "Programacin Java SE" 2013

10. Clic derecho del mouse sobre el proyecto ProyectoElemploPersonasSobreEscritura y
seleccionar Run, observe el resultado en la salida de consola (Tab Output):
run:
---- Observe como cambia el comportamiento al sobre-escribir el mtodo ----
unImportanteMetodo(test1) en la clase Persona
unImportanteMetodo(test2) en la clase Estudiante
unImportanteMetodo(test3) en la clase EstudianteInternacional
BUILD SUCCESSFUL (total time: 0 seconds)

11. Nuevamente modificamos la clase ElemploPersonas.java, para agregar unas lneas ms ;-) ,
como se muestra en el cdigo de abajo, poner especial atencin en los cdigos agregados
resaltados con negrita y azul.
public class ElemploPersonas {

public static void main(String[] args) {

// Mismo mtodo o comportamiento que se implementa de diferentes formas en cada clase.
System.out.println("---- Observe como cambia el comportamiento al sobre-escribir el mtodo ----");

Persona persona1 = new Persona("John");
persona1.unImportanteMetodo("test1");

Estudiante est1 = new Estudiante("Fulano", "Instituto N1", 5.0);
est1.unImportanteMetodo("test2");

EstudianteInternacional estInt = new EstudianteInternacional("Sultano", "Instituto N2", 5.5, "Chile");
estInt.unImportanteMetodo("test3");

// Polimorfismo puro, son todo al fin y al cabo tipos de Persona
System.out.println("---- Observe el comportamiento de polimorfismo ----");

Persona persona2 = new Estudiante("Mengano", "Instituto N3", 6.0);
persona2.unImportanteMetodo("test4");

Persona persona3 = new EstudianteInternacional("Perengano", "Instituto N4", 4.5, "Chile");
persona3.unImportanteMetodo("test5");

// Polimorfismo puro, EstudianteInternacional tambin es tipo de Estudiante ya que hereda de l.
Estudiante est2 = new EstudianteInternacional("Otro John", "Instituto N4", 5.7, "Chile");
est2.unImportanteMetodo("test6");
}
}


AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Herencia 29

Curso: "Programacin Java SE" 2013

12. Clic derecho del mouse sobre el proyecto ProyectoElemploPersonasSobreEscritura y
seleccionar Run, observe el resultado en la salida de consola (Tab Output):
run:
---- Observe como cambia el comportamiento al sobre-escribir el mtodo ----
unImportanteMetodo(test1) en la clase Persona
unImportanteMetodo(test2) en la clase Estudiante
unImportanteMetodo(test3) en la clase EstudianteInternacional
---- Observe el comportamiento de polimorfismo ----
unImportanteMetodo(test4) en la clase Estudiante
unImportanteMetodo(test5) en la clase EstudianteInternacional
unImportanteMetodo(test6) en la clase EstudianteInternacional
BUILD SUCCESSFUL (total time: 0 seconds)


AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Herencia 30

Curso: "Programacin Java SE" 2013

Ejercicio 5: Sobre escritura de mtodos en la herencia, un programa para envos de Mensajes.
1. Crear un proyecto Netbeans: Java Application
Seleccionar File desde el men superior y seleccionar New Project.
Seleccionar Java bajo Categories, y Seleccionar Java Application bajo Projects.
Clic Next
Bajo el panel Name and Location, para el Nombre del Proyecto (Project Name), ingrese
ProyectoEjemploMensaje. Este es el nombre que se le dar al proyecto.
Para el campo Create Main Class, ingresar EjemploMensaje. Esto es para generar la
clase autnoma EjemploMensaje.java, que contendr el mtodo main (...).
Clic Finish.

2. Creando la clase java Mensaje:
Clic derecho en el proyecto ProyectoEjemploMensaje y seleccionamos New->Java
Class.
Observe que aparece la ventana para crear una clase Java: New Java Class
Para el nombre de la case (Class Name), ingrese Mensaje
Clic Finish.
Observe que se crea la clase Mensaje.java y es desplegada en el editor de cdigo del
IDE.

AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Herencia 31

Curso: "Programacin Java SE" 2013

3. Modifique la clase Mensaje.java como se muestra en el Cdigo de abajo, poner especial
atencin en los comentarios resaltados con negrita.
/**
*
* @author Andrs Guzmn
*/
public class Mensaje {

private String texto;

public Mensaje(String texto) {
this.texto = texto;
}

public String enviar() {
// Enviando mensaje ....
return texto;
}
}

4. Creando la clase java MensajeFormal:
Clic derecho en el proyecto ProyectoEjemploMensaje y seleccionamos New->Java
Class.
Observe que aparece la ventana para crear una clase Java: New Java Class
Para el nombre de la case (Class Name), ingrese MensajeFormal
Clic Finish.
Observe que se crea la clase MensajeFormal.java y es desplegada en el editor de cdigo
del IDE.


AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Herencia 32

Curso: "Programacin Java SE" 2013

Modifique la clase MensajeFormal.java como se muestra en el Cdigo de abajo, poner
especial atencin en los comentarios resaltados con negrita.
import java.util.Date;

/**
*
* @author Andrs Guzmn
*/
public class MensajeFormal extends Mensaje {

private String remitente;
private String destinatario;
private boolean esUrgente;
private Date fechaEnvio = new Date();

public MensajeFormal(String texto, String remitente,
String destinatario) {

super(texto);

this.remitente = remitente;
this.destinatario = destinatario;
}

public MensajeFormal(String texto, String remitente,
String destinatario, boolean esUrgente) {

this(texto, remitente, destinatario);
this.esUrgente = esUrgente;
}

@Override
public String enviar() {

String texto = super.enviar();
String envio = "";

if (esUrgente) {
envio += "Correo Urgente!".concat("\n\n");
}

envio += "Estimado ".concat(destinatario).concat(":");
envio += "\n\n".concat(texto).concat("\n\n");
envio += "Saluda atentamente,".concat("\n\n");
envio += remitente;
envio += "\n" + fechaEnvio;

return envio;
}
}


AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Herencia 33

Curso: "Programacin Java SE" 2013

5. Modificamos la clase EjemploMensaje.java, como se muestra en el cdigo de abajo, poner
especial atencin en los cdigos agregados resaltados con negrita y azul.
/**
*
* @author Andrs Guzmn
*/
public class EjemploMensaje {
public static void main(String[] args) {
Mensaje msj = new MensajeFormal("Necesito los diagramas", "James Gosling", "Rod Johnson", true);

String resultado = msj.enviar();
System.out.println(resultado);
}
}

6. Clic derecho del mouse sobre el proyecto ProyectoEjemploMensaje y seleccionar Run, observe
el resultado en la salida de consola (Tab Output):
run:
Correo Urgente!

Estimado Rod Johnson:

Necesito los diagramas

Saluda atentamente,

James Gosling
Fri Oct 01 16:29:15 CLT 2010
BUILD SUCCESSFUL (total time: 1 second)


AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Herencia 34

Curso: "Programacin Java SE" 2013

Ejercicio 6: La clase con el modificador Final.
Utilizando el modificador final se puede declarar que una clase es final, que no puede tener
subclases.
En un atributo: no modificable-> Contante. En un mtodo no se puede sobrescribir en un
heredero. En una clase no se puede heredar.
Existen (al menos) dos razones por las que se podra querer hacer esto: razones de seguridad y
razones de diseo.
1. Crear un proyecto Netbeans: Java Application
Seleccionar File desde el men superior y seleccionar New Project.
Seleccionar Java bajo Categories, y Seleccionar Java Application bajo Projects.
Clic Next
Bajo el panel Name and Location, para el Nombre del Proyecto (Project Name), ingrese
ProyectoEjemploClaseFinal. Este es el nombre que se le dar al proyecto.
Para el campo Create Main Class, ingresar EjemploClaseFinal. Esto es para generar la
clase autnoma EjemploClaseFinal.java, que contendr el mtodo main (...).
Clic Finish.

2. Creando la clase java Persona:
Clic derecho en el proyecto ProyectoEjemploClaseFinal y seleccionamos New->Java
Class.
Observe que aparece la ventana para crear una clase Java: New Java Class
Para el nombre de la case (Class Name), ingrese Persona
Clic Finish.
Observe que se crea la clase Persona.java y es desplegada en el editor de cdigo del
IDE.

AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Herencia 35

Curso: "Programacin Java SE" 2013

3. Modifique la clase Persona.java como se muestra en el Cdigo de abajo, poner especial
atencin en los comentarios resaltados con negrita.
// Hacemos que la clase Persona sea final
public final class Persona {
public Persona() {
}
}

4. Creando la clase java Profesor:
Clic derecho en el proyecto ProyectoEjemploClaseFinal y seleccionamos New->Java
Class.
Observe que aparece la ventana para crear una clase Java: New Java Class
Para el nombre de la case (Class Name), ingrese Profesor
Clic Finish.
Observe que se crea la clase Profesor.java y es desplegada en el editor de cdigo del
IDE.
Modifique la clase Profesor.java como se muestra en el Cdigo de abajo, poner especial
atencin en los comentarios resaltados con negrita.
public class Profesor extends Persona {

public Profesor() {
}
}

5. Observe el error de compilacin:

AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Herencia 36

Curso: "Programacin Java SE" 2013

Ejercicio 7: El mtodo Final, un mtodo final no se puede sobrescribir en un heredero.

1. Crear un proyecto Netbeans: Java Application
Seleccionar File desde el men superior y seleccionar New Project.
Seleccionar Java bajo Categories, y Seleccionar Java Application bajo Projects.
Clic Next
Bajo el panel Name and Location, para el Nombre del Proyecto (Project Name), ingrese
ProyectoEjemploMetodoFinal. Este es el nombre que se le dar al proyecto.
Para el campo Create Main Class, ingresar EjemploMetodoFinal. Esto es para generar
la clase autnoma EjemploMetodoFinal.java, que contendr el mtodo main (...).
Clic Finish.

2. Creando la clase java Persona:
Clic derecho en el proyecto ProyectoEjemploMetodoFinal y seleccionamos New->Java
Class.
Observe que aparece la ventana para crear una clase Java: New Java Class
Para el nombre de la case (Class Name), ingrese Persona
Clic Finish.
Observe que se crea la clase Persona.java y es desplegada en el editor de cdigo del
IDE.

AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Herencia 37

Curso: "Programacin Java SE" 2013

3. Modifique la clase Persona.java como se muestra en el Cdigo de abajo, poner especial
atencin en los comentarios resaltados con negrita.
public class Persona {
public Persona() {
}

// algunImportanteMetodo() es un mtodo final
public final void algunImportanteMetodo(){
}
}

4. Creando la clase java Profesor:
Clic derecho en el proyecto ProyectoEjemploMetodoFinal y seleccionamos New->Java
Class.
Observe que aparece la ventana para crear una clase Java: New Java Class
Para el nombre de la case (Class Name), ingrese Profesor
Clic Finish.
Observe que se crea la clase Profesor.java y es desplegada en el editor de cdigo del
IDE.
Modifique la clase Profesor.java como se muestra en el Cdigo de abajo, poner especial
atencin en los comentarios resaltados con negrita.
public class Profesor extends Persona {

public Profesor() {
}

// sobre-escribe el mtodo final algunImportanteMetodo() de la clase Persona
@Override
public void algunImportanteMetodo(){
}
}


AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Herencia 38

Curso: "Programacin Java SE" 2013

5. Observe el error de compilacin:



AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Herencia 39

Curso: "Programacin Java SE" 2013

Resumen

En esta prctica de laboratorio vimos los conceptos que hay detrs de la herencia de clases.
Aprendimos a crear clases que hereden o extienden de otra clase, tambin realizamos ejemplos
concretos de la sobre-escritura de mtodos, donde una clase hija remplaza o modifica el mtodo de la
sper clase o padre. Finalmente aprendimos el concepto de modificadores final en las clases y en
mtodos.



















Enva tus consultas a los foros!
Aqu es cuando debes sacarte todas las dudas
haciendo consultas en los foros
correspondientes
AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Herencia 40

Potrebbero piacerti anche