0% encontró este documento útil (0 votos)
62 vistas39 páginas

Ejercicios de Herencia en Java

La herencia permite que una subclase herede propiedades y métodos de una superclase. El documento explica el concepto de herencia en Java y muestra cómo crear una clase que herede de otra, así como cómo sobrescribir métodos. Finalmente, presenta una serie de ejercicios para practicar el uso de la herencia en la creación de una aplicación con clases relacionadas.

Cargado por

nelson sanabio
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
62 vistas39 páginas

Ejercicios de Herencia en Java

La herencia permite que una subclase herede propiedades y métodos de una superclase. El documento explica el concepto de herencia en Java y muestra cómo crear una clase que herede de otra, así como cómo sobrescribir métodos. Finalmente, presenta una serie de ejercicios para practicar el uso de la herencia en la creación de una aplicación con clases relacionadas.

Cargado por

nelson sanabio
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Herencia

La herencia es uno de los conceptos ms importantes en la programacin orientada a objetos junto con la encapsulacin y
polimorfismo. Bsicamente permite reutilizar el cdigo porque una sub-clase (clase hija o derivada) puede usar fcilmente las propiedades y
mtodos definidos en la super clase (clase padre).
El objetivo de esta prctica es exponer el concepto de herencia en Java. Se mostrar cmo crear una clase Java extendiendo otra clase. Se ver
tambien que la clase Object es la madre de todas las clases. Se aprender a sobreescrobir (override) un mtodo de la clase padre. Se ver cmo
hacer un type casting entre instancias de objetos que estn relacionados a travs de la herencia. Finalmente se ver el uso de las clases y
mtodos final.

Recursos
Inheritance de Java Tutorial
Overriding vs Hiding artculo de [Link]

Ejercicios
Ejercicio
Ejercicio
Ejercicio
Ejercicio
Ejercicio
Ejercicio
Tarea

1:
2:
3:
4:
5:
6:

Compilar y ejecitar un programa Java que usa clases que estn relacionadas a travs de la herencia
Cadena de llamada a constructor y la palabra reservada super
Overriding de mtodos
Type casting
Clases y mtodos final
Construccin de una aplicacin

Ejercicio 1: Compilar y ejecitar un programa Java que usa clases que estn relacionadas a travs de la herencia
En este ejercicio se va a escribir un programa en el que varias clases, que estn relacionadas mediante la herencia se crean y usan. Primero se
crea una clase Person. Despus se crean subclases de la clase Person, clase Student y clase Teacher. Tambin se crea una subclase de la clase
Student, que se llama clase InternationalStudent class.
1. Compilar y ejecutar un programa Java que usa clases relacionadas
2. Ver la jerarqua de la herencia con el IDE

(1.1) Compilar y ejecutar un programa Java que usa clases relacionadas


1. Crear un nuevo proyecto NetBeans
Seleccionar File->New Project (Ctrl+Shift+N). El dilogo New Project aparece.
En la seccin Choose Project seleccionar Java en la seccin Categories y Java Application en la seccin Projects.
Pulsar en Next.

En la seccin Name and Location, del campo Project Name, escribir MyPeopleExample. (Figura-1.10 )
Click Finish.

Figura-1.10: Create a new project


Observar que aparece el nodo del proyecto MyPeopleExample se crea en la seccin Projects del IDE NetBeans y que se muestra
[Link] en la ventana del editor del IDE.

2. Escribir [Link].
Hacer click con el botn derecho en el proyecto MyPeopleExample y seleccionar New->Java Class.
Observar que aparece el cuadro de dilogo New Java Class con la seccin Name and Location.
En el campo Class Name escribir Person.
En el campo Package, escribir mypeopleexample o seleccionar mypeopleexample a partir del men desplegable . (Figura-1.11
)
Click en Finish.

Figura-1.11: Creacin de [Link]


Observar que se genera y muestra en la ventana del editor [Link].
Modificar [Link] como se muestra en Cdigo-1.12. Notar que la clase Person tiene dos campos, name y address, y los mtodos
getter y setter para ellos.

package mypeopleexample;
public class Person {
private String name;
private String address;
public String getName() {
return name;
}
public void setName(String name) {
[Link] = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
[Link] = address;
}
}
Cdigo-1.12: [Link]
3. Escribir [Link]. Notar que la clase Student es una subclase de la clase Person.
Hacer click con el botn derecho en el proyecto MyPeopleExample y seleccionar New->Java Class.
Observar que aparece el cuadro de dilogo New Java Class con la seccin Name and Location.
En el campo Class Name escribir Student.
En el campo Package, escribir mypeopleexample o seleccionar mypeopleexample a partir del men desplegable . (Figura-1.11 )
Click en Finish.

Observar que se genera y muestra en la ventana del editor [Link].


Modificar [Link] como se muestra en Cdigo-1.13. Notar que la clase Student tiene dos campos, school y grade, y mtodos
getter y setter para ellos.
package mypeopleexample;
public class Student extends Person {
private String school;
private double grade;
public String getSchool() {
return school;
}
public void setSchool(String school) {
[Link] = school;
}
public double getGrade() {
return grade;
}
public void setGrade(double grade) {
[Link] = grade;
}
}
Cdigo-1.13: [Link]
4. Escribir [Link]. Notar que la clase InternationalStudent es una subclase de la clase Student.
Hacer click con el botn derecho en el proyecto MyPeopleExample y seleccionar New->Java Class.
Observar que aparece el cuadro de dilogo New Java Class con la seccin Name and Location.
En el campo Class Name escribir InternationalStudent.
En el campo Package, escribir mypeopleexample o seleccionar mypeopleexample a partir del men desplegable .
Click en Finish.

Observar que se genera y muestra en la ventana del editor [Link].


Modificar [Link] como se muestra en Cdigo-1.14. Notar que la clase InternationalStudent tiene un campo,
country, y mtodos getter y setter.
package mypeopleexample;
public class InternationalStudent extends Student {
private String country;
public String getCountry() {
return country;
}
public void setCountry(String country) {
[Link] = country;
}
}
Cdigo-1.14: [Link]
5. Escribir [Link]. Notar que la clase Teacher es una subclase de la clase Person.
Hacer click con el botn derecho en el proyecto MyPeopleExample y seleccionar New->Java Class.
Observar que aparece el cuadro de dilogo New Java Class con la seccin Name and Location.
En el campo Class Name escribir Teacher.
En el campo Package, escribir mypeopleexample o seleccionar mypeopleexample a partir del men desplegable .
Click Finish.

Observar que se genera y muestra en la ventana del editor [Link].


Modificar [Link] como se muestra en Cdigo-1.16. Notar que la clase Teacher tiene un campo, subject, y mtodos getter y setter
para su gestin.
package mypeopleexample;
public class Teacher extends Person {
private String subject;
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
[Link] = subject;
}
}
Cdigo-1.16: [Link]
6. Modificar [Link].
Modificar the [Link] como se muestra en Cdigo-1.17. El cambio es para crear objetos de las clases Person, Student,
InternationalStudent, y Teacher.
package mypeopleexample;
public class Main {
public static void main(String[] args) {
// Create object instances and invoke methods.
// Note that you can use methods defined in a parent
// class for object instances of the child class.
Person person1 = new Person();
[Link]("Tom Jones");
Student student1 = new Student();
[Link]("CCR");
[Link]("Lexington High");
InternationalStudent internationalStudent1 =
new InternationalStudent();
[Link]("Bill Clinton");
[Link]("Lexington High");
[Link]("Korea");
Teacher teacher1 = new Teacher();
[Link]("Beatles");
[Link]("History");

// Display name of object instances using the getName() method


// defined in the Person class.
[Link]("Displaying names of all object instances...");
[Link](" [Link]() = " + [Link]());
[Link](" [Link]() = " + [Link]());
[Link](" [Link]() = " +
[Link]());
[Link](" [Link]() = " + [Link]());
}
}
Cdigo-1.17: [Link]
7. Compilar y ejecutar el programa.
Hacer click con el botn derecho en el proyecto MyPeopleExample y seleccionar Run.
Observar el resultado en la ventana Output de NetBeans. (Figura-1.18 )
Displaying names of all object instances...
[Link]() = Tom Jones
[Link]() = CCR
[Link]() = Bill Clinton
[Link]() = Beatles
Figura-1.18: Resultado de la ejecucin de la aplicacin
Volver al inicio del ejercicio

(1.3) Ver la jerarqua de la herencia a travs del mtodo getSuperclass() de la clase Class
En este paso, se va a mostrar la jerarqua de clases a travs del uso de un mtodo de la API - getSuperclass() de una clase Class class - en el
programa.
1. Modificar [Link] como se muestra en Cdigo-1.30. El fragmento de cdigo a aadir est en azul.
package mypeopleexample;
public class Main {
public static void main(String[] args) {
// Create object instances and invoke methods.
// Note that you can use methods defined in a parent
// class for object instances of the child class.
Person person1 = new Person();
[Link]("Tom Jones");
Student student1 = new Student();
[Link]("CCR");
[Link]("Lexington High");
InternationalStudent internationalStudent1 =
new InternationalStudent();
[Link]("Bill Clinton");
[Link]("Lexington High");
[Link]("Korea");
Teacher teacher1 = new Teacher();
[Link]("Beatles");
[Link]("History");
// Display name of object instances using the getName() method
// defined in the Person class.
[Link]("Displaying names of all object instances...");
[Link](" [Link]() = " + [Link]());
[Link](" [Link]() = " + [Link]());
[Link](" [Link]() = " +
[Link]());
[Link](" [Link]() = " + [Link]());
// Display the class hierarchy of the InternationalStudent
// class through getSuperclass() method of Class class.
Class class1 = [Link]();
[Link]("Displaying class hierarchy of InternationalStudent Class...");
while ([Link]() != null){
String child = [Link]();
String parent = [Link]().getName();
[Link](" " + child + " class is a child class of " + parent);
class1 = [Link]();
}
}
}
Cdigo-1.30: [Link] modificado

2. Compilar y ejecutar el programa.


Hacer click con el botn derecho en el proyecto MyPeopleExample y seleccionar Run.
Observar el resultado en la ventana Output de NetBeans. (Figura-1.31 )
Displaying names of all object instances...
[Link]() = Tom Jones
[Link]() = CCR
[Link]() = Bill Clinton
[Link]() = Beatles
Displaying class hierarchy of InternationalStudent Class...
[Link] class is a child class of [Link]
[Link] class is a child class of [Link]
[Link] class is a child class of [Link]
Figura-1.31: Resultado de la ejecucin de la aplicacin

Volver al inicio del ejercicio

Resumen
En este ejercicio se ha visto la creacin de objetos que estn relacionados a travs de la herencia.
Volver al inicio

Ejercicio 2: Encadenamiento de llamadas a Constructor


En este ejercicio, se experimenta con el concepto de la llamada encadenada de constructor y cmo usar el mtodo super() y la referencia super.
1. Cadena de llamada a Constructor
2. mtodo super()
3. referencia super

(2.1)Cadena de llamada a Constructor


Se va a usar el proyecto MyPeopleExample para los cambios que se van a realizar esta seccin o se puede crear otro proyecto nuevo, por
ejemplo, MyPeopleExampleConstructor, mediante "copia" del proyecto MyPeopleExample - Hacer click con el botn derecho en el proyecto
MyPeopleExample project y seleccionar Copy Project. Es esta parte se asume que se ha creado el proyecto nuevo.
1. Modificar [Link] como se muestra en Cdigo-2.10. El cambio consiste en aadir una sentencia de impresin dentro del constructor. El
fragmento de cdigo que se require aadir se muestra en azul.
package mypeopleexample;
public class Person {
public Person() {
[Link]("Person: constructor is called");
}
private String name;
private String address;
public String getName() {
return name;
}
public void setName(String name) {
[Link] = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
[Link] = address;
}
}
Cdigo-2.10: [Link]
2. Modificar [Link] como se muestra en Cdigo-2.11. El cambio consiste en aadir una sentencia de impresin dentro del constructor. El
fragmento de cdigo que se require aadir se muestra en azul.
package mypeopleexample;
public class Student extends Person {
public Student() {
[Link]("Student: constructor is called");
}
private String school;

private double grade;


public String getSchool() {
return school;
}
public void setSchool(String school) {
[Link] = school;
}
public double getGrade() {
return grade;
}
public void setGrade(double grade) {
[Link] = grade;
}
}
Cdigo-2.11: [Link]
3. Modificar [Link] como se muestra en Cdigo-2.12. El cambio consiste en aadir una sentencia de impresin dentro del
constructor. El fragmento de cdigo que se require aadir se muestra en azul.
package mypeopleexample;
public class InternationalStudent extends Student {
public InternationalStudent() {
[Link]("InternationalStudent: constructor is called");
}
private String country;
public String getCountry() {
return country;
}
public void setCountry(String country) {
[Link] = country;
}
}
Cdigo-2.12: [Link]
4. Modificar [Link] como se muestra en Cdigo-2.13. El cambio consiste en aadir una sentencia de impresin dentro del constructor. El
fragmento de cdigo que se require aadir se muestra en azul.
package mypeopleexample;
public class Teacher extends Person {
public Teacher() {
[Link]("Teacher: constructor is called");
}
private String subject;
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
[Link] = subject;
}
}
Cdigo-2.13: [Link]
5. Modificar [Link] como se muestra en Cdigo-2.14. El cambio consiste en aadir una sentencia de impresin dentro del constructor. El
fragmento de cdigo que se require aadir se muestra en azul.
package mypeopleexample;
public class Main {
public static void main(String[] args) {
// Create an object instance of
// InternationalStudent class.
[Link]("---- About to create an object instance of InternationalStudent class...");
InternationalStudent internationalStudent1 =
new InternationalStudent();
// Create an object instance of
// Teacher class.
[Link]("---- About to create an object instance of Teacher class...");

Teacher teacher1 = new Teacher();


}
}
Cdigo-2.14: [Link] modificado
6. Compilar y ejecutar el programa.
Hacer click con el botn derecho en el proyecto MyPeopleExampleConstructor y seleccionar Run.
Observar el resultado en la ventana Output de NetBeans. (Figura-2.15)
---- About to create an object instance of InternationalStudent class...
Person: constructor is called
Student: constructor is called
InternationalStudent: constructor is called
---- About to create an object instance of Teacher class...
Person: constructor is called
Teacher: constructor is called
Figura-2.15: Resultado

Volver al inicio del ejercicio

(2.2) mtodo super()


Se puede usar el proyecto MyPeopleExample para el cambio que se va a realizar en este paso o se puede crear un proyecto nuevo, por ejemplo
MyPeopleExampleConstructorSuper, mediante "copia" del proyecto MyPeopleExample - Hacer click con el botn derecho en el proyecto
MyPeopleExample project y seleccionar Copy Project. Esta seccin asume que se ha creado el proyecto nuevo.
1. Modificar [Link] como se muestra en Cdigo-2.16. El cambio consiste en aadir otro constructor que se puede llamar desde una
subclase. El fragmento de cdigo que se require aadir se muestra en azul..
package mypeopleexample;
public class Person {
public Person() {
[Link]("Person: constructor is called");
}
public Person(String name) {
[Link] = name;
[Link]("Person: constructor 2 is called");
}
private String name;
private String address;
public String getName() {
return name;
}
public void setName(String name) {
[Link] = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
[Link] = address;
}
}
Cdigo-2.16: [Link]
2. Modificar [Link] como se muestra en Cdigo-2.17. El cambio es la llamada del mtodo constructor de la super clase usando el mtodo
super(). El fragmento de cdigo que se require aadir se muestra en azul.
package mypeopleexample;
public class Student extends Person {
public Student() {
[Link]("Student: constructor is called");
}
public Student(String name, String school, double grade) {
super(name);
[Link] = school;
[Link] = grade;
[Link]("Student: constructor 2 is called");
}

private String school;


private double grade;
public String getSchool() {
return school;
}
public void setSchool(String school) {
[Link] = school;
}
public double getGrade() {
return grade;
}
public void setGrade(double grade) {
[Link] = grade;
}
}
Figura-2.17: [Link]
3. Modificar [Link] como se muestra en Cdigo-2.18. El cambio es la llamada del mtodo constructor de la super clase
usando el mtodo super(). El fragmento de cdigo que se require aadir se muestra en azul.
package mypeopleexample;
public class InternationalStudent extends Student {
public InternationalStudent() {
[Link]("InternationalStudent: constructor is called");
}
public InternationalStudent(String name, String school, double grade, String country) {
super(name, school, grade);
[Link] = country;
[Link]("InternationalStudent: constructor 2 is called");
}
private String country;
public String getCountry() {
return country;
}
public void setCountry(String country) {
[Link] = country;
}
}
Cdigo-2.18: [Link]
4. Modificar [Link] como se muestra en Cdigo-2.19. El cambio consiste en crear un objeto de la clase InternationalStudent con parmetros
de inicializacin. El fragmento de cdigo que se require aadir se muestra en azul.
package mypeopleexample;
public class Main {
public static void main(String[] args) {
// Create an object instance of
// InternationalStudent class.
[Link]("---- About to create an object instance of InternationalStudent class...");
InternationalStudent internationalStudent1 =
new InternationalStudent("Sang Shin", // Name
"1 Dreamland", // Address
4.5,
// Grade
"Korea");
// Country
[Link]("[Link]() = " + [Link]());
[Link]("[Link]() = " + [Link]());
[Link]("[Link]() = " + [Link]());
[Link]("[Link]() = " + [Link]());
}
}
Cdigo-2.19: [Link]
5. Compilar y ejecutar el programa.
Hacer click con el botn derecho en el proyecto MyPeopleExampleConstructorSuper y seleccionar Run.
Observar el resultado en la ventana Output de NetBeans. (Figura-2.20 )
---- About to create an object instance of InternationalStudent class...
Person: constructor 2 is called

Student: constructor 2 is called


InternationalStudent: constructor 2 is called
[Link]() = Sang Shin
[Link]() = null
[Link]() = 4.5
[Link]() = Korea
Figura-2.20: Resultado

Volver al inicio del ejercicio

(2.3) referencia super


Se puede el proyecto MyPeopleExample para modificarlo en esta seccin o se puede crear un nuevo proyecto, por ejemplo,
MyPeopleExampleConstructorSuper2, "copiando" el proyecto MyPeopleExample - hacer click con el botn derecho en el proyecto
MyPeopleExample y seleccionar Copy Project. En esta seccin se asume que se ha creado un nuevo proyecto.
1. Modificar [Link] como se muestra en Cdigo-2.21. El cambio consiste en cambiar los modificadores de acceso de los campos a
protected de tal manera que se puedan acceder desde las subclases. El fragmento de cdigo que se require aadir se muestra en azul.
package mypeopleexample;
public class Person {
public Person() {
[Link]("Person: constructor is called");
}
public Person(String name) {
[Link] = name;
[Link]("Person: constructor 2 is called");
}
protected String name;
protected String address;
public String getName() {
return name;
}
public void setName(String name) {
[Link] = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
[Link] = address;
}
}
Cdigo-2.21: [Link]
2. Modificar [Link] como se muestra en Cdigo-2.22. El cambio consiste en cambiar los modificadores de acceso de los campos a
protected para que se puedan acceder desde las subclases. El fragmento de cdigo que se require aadir se muestra en azul.
package mypeopleexample;
public class Student extends Person {
public Student() {
[Link]("Student: constructor is called");
}
public Student(String name, String school, double grade) {
super(name);
[Link] = school;
[Link] = grade;
[Link]("Student: constructor 2 is called");
}
protected String school;
protected double grade;
public String getSchool() {
return school;
}
public void setSchool(String school) {
[Link] = school;
}
public double getGrade() {
return grade;

}
public void setGrade(double grade) {
[Link] = grade;
}
}
Figura-2.22: [Link]
3. Modificar [Link] como se muestra en Cdigo-2.23. El cambio consiste en cambiar los modificadores de acceso de los
campos a protected para que se puedan acceder desde las subclases. El fragmento de cdigo que se require aadir se muestra en azul.
package mypeopleexample;
public class InternationalStudent extends Student {
public InternationalStudent() {
[Link]("InternationalStudent: constructor is called");
}
public InternationalStudent(String name, String school, double grade, String country) {
[Link] = name;
[Link] = school;
[Link] = grade;
[Link] = country;
[Link]("InternationalStudent: constructor 2 is called");
}
private String country;
public String getCountry() {
return country;
}
public void setCountry(String country) {
[Link] = country;
}
}
Cdigo-2.23: [Link]
4. Compilar y ejecutar el programa.
Hacer click con el botn derecho en el proyecto MyPeopleExampleConstructorSuper2 y seleccionar Run.
Observar el resultado en la ventana Output de NetBeans. (Figura-2.24)
---- About to create an object instance of InternationalStudent class...
Person: contructor is called
Student: contructor is called
InternationalStudent: contructor 2 is called
[Link]() = Sang Shin
[Link]() = null
[Link]() = 4.5
[Link]() = Korea
Figura-2.24: Resultado

Volver al inicio del ejercicio

Resumen
En este ejercicio se ha visto cmo los constructores de clases relacionadas se encadenan cuando se crea una instancia de un objeto. Tambin se
ha visto cmo usar el mtodo super() para invocar un constructor de la clase padre.
Volver al inicio

Ejercicio 3: Predominancia (Overriding) de mtodos


Este ejercicio muestra el concepto de overrriding de mtodos, que es posiblemente la caracterstica ms importante de la herencia Java.
1. Override de mtodos
2. Runtime-polimorfismo
3. Mtodos ocultos (aplica slo a mtodos estticos)

(3.1) Override de mtodos


Se puede usar el proyecto MyPeopleExample para los cambios que se van a hacer en esta seccin o se puede crear un nuevo proyecto, por
ejemplo, MyPeopleExampleOverriding, "copiando" el proyecto MyPeopleExample - Hacer click con el botn derecho en el proyecto
MyPeopleExample y seleccionar Copy Project. Se asume aqu que se ha creado un nuevo proyecto.
1. Modificar [Link] como se muestra en Cdigo-3.10. El cambio consiste en aadir un nuevo mtodo myMethod(String t) que se
priorizar por la subclase. El fragmento de cdigo que se require aadir se muestra en azul. Los mtodos println en los constructores estn
comentados por simplicidad.
package mypeopleexample;

public class Person {


public Person() {
// [Link]("Person: constructor is called");
}
public Person(String name) {
[Link] = name;
// [Link]("Person: constructor 2 is called");
}
protected String name;
protected String address;
public String getName() {
return name;
}
public void setName(String name) {
[Link] = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
[Link] = address;
}
// A method that will be overridden by sub-class
public void myMethod(String t){
[Link]("myMethod(" + t + ") in Person class");
}
}
Cdigo-3.10: [Link]
2. Modificar [Link] como se muestra en Cdigo-3.11. El cambio consiste en modificar los modificadores de acceso de los campos a
protected para que puedan ser accedidos desde la subclase. El fragmento de cdigo que se require aadir se muestra en azul. Los mtodos
println en los constructores estn comentados por simplicidad.
package mypeopleexample;
public class Student extends Person {
public Student() {
// [Link]("Student: constructor is called");
}
public Student(String name, String school, double grade) {
super(name);
[Link] = school;
[Link] = grade;
// [Link]("Student: constructor 2 is called");
}
protected String school;
protected double grade;
public String getSchool() {
return school;
}
public void setSchool(String school) {
[Link] = school;
}
public double getGrade() {
return grade;
}
public void setGrade(double grade) {
[Link] = grade;
}
// A overriding method
public void myMethod(String t){
[Link]("myMethod(" + t + ") in Student class");
}
}
Figura-3.11: [Link] con mtodo overriding
3. Modificar [Link] como se muestra en Cdigo-3.12. El cambio consiste en modificar los modificadores de acceso de los

campos a protected para que puedan ser accedidos desde la subclase. El fragmento de cdigo que se require aadir se muestra en azul. Los
mtodos println en los constructores estn comentados por simplicidad.
package mypeopleexample;
public class InternationalStudent extends Student {
public InternationalStudent() {
// [Link]("InternationalStudent: constructor is called");
}
public InternationalStudent(String name, String school, double grade, String country) {
[Link] = name;
[Link] = school;
[Link] = grade;
[Link] = country;
// [Link]("InternationalStudent: constructor 2 is called");
}
private String country;
public String getCountry() {
return country;
}
public void setCountry(String country) {
[Link] = country;
}
// A overriding method
public void myMethod(String t){
[Link]("myMethod(" + t + ") in InternationalStudent class");
}
}
Cdigo-3.12: [Link] con mtodo overriding
4. Modificar [Link] como se muestra en Cdigo-3.13. El cambio es crear instancias de objetos de clases Person, Student, y
InternationalStudent que estn relacionados a travs de la herencia e invoca el mtodo overriden myMethod() para cada uno de esas
instancias. El fragmento de cdigo que se require aadir se muestra en azul.
package mypeopleexample;
public class Main {
public static void main(String[] args) {
[Link]("---- Observe overriding method behavior ----");
Person person1 = new Person();
[Link]("test1");
Student student1 = new Student();
[Link]("test2");
InternationalStudent internationalStudent1 =
new InternationalStudent();
[Link]("test3");
}
}
Cdigo-3.13: [Link]
5. Compilar y ejecutar el programa.
Hacer click con el botn derecho en el proyecto MyPeopleExampleOverriding y seleccionar Run.
Observar el resultado en la ventana Output de NetBeans. (Figura-3.14 )
---- Observe overriding behavior ---myMethod(test1) in Person class
myMethod(test2) in Student class
myMethod(test3) in InternationalStudent class
Figura-3.14: Resultado
Volver al inicio del ejercicio

(3.2) Polimorfismo en Runtime


Se puede usar el proyecto MyPeopleExample para los cambios que se van a hacer en esta seccin o se puede crear un nuevo proyecto, por
ejemplo, MyPeopleExampleOverridingPolymorphism, "copiando" el proyecto MyPeopleExample - hacer click con el botn derecho en el
proyecto MyPeopleExample y seleccionar Copy Project. En lo que sigue se asume que ha creado un nuevo proyecto.
Nota: El cdigo de ejemplo no muestra la capacidad de polimorfismo en runtime pero s el esquema subyacente que lo permite. La capacidad del
comportamiento polimrfico ser explorado en otro laboratorio.

1. Modificar [Link] como se muestra en Cdigo-3.20. El cambio intenta observar el comportamiento polimrfico. El fragmento de cdigo
que se require aadir se muestra en azul.
public class Main {
public static void main(String[] args) {
[Link]("---- Observe overriding method behavior ----");
Person person1 = new Person();
[Link]("test1");
Student student1 = new Student();
[Link]("test2");
InternationalStudent internationalStudent1 =
new InternationalStudent();
[Link]("test3");
// Polymorphic behavior
[Link]("---- Observe polymorphic behavior ----");
Person person2 = new Student();
[Link]("test4");
Person person3 = new InternationalStudent();
[Link]("test5");
Student student2 = new InternationalStudent();
[Link]("test6");
}
}
Cdigo-3.20: [Link]
2. Compilar y ejecutar el programa.
Hacer click con el botn derecho en el proyecto MyPeopleExampleOverridingPolymorphism y seleccionar Run.
Observar el resultado en la ventana Output de NetBeans. (Figura-3.21 )
---- Observe overriding behavior ---myMethod(test1) in Person class
myMethod(test2) in Student class
myMethod(test3) in InternationalStudent class
---- Observe polymorphic behavior ---myMethod(test4) in Student class
myMethod(test5) in InternationalStudent class
myMethod(test6) in InternationalStudent class
Figura-3.21: Resultado

Volver al inicio del ejercicio

(3.3) Mtodos ocultos


Se puede usar el proyecto MyPeopleExample para los cambios que se van a hacer en esta seccin o se puede crear un nuevo proyecto, por
ejemplo, MyPeopleExampleHidingMethods, "copiando" el proyecto MyPeopleExample - hacer click con el botn derecho en el proyecto
MyPeopleExample y seleccionar Copy Project. En lo que sigue se asume que ha creado un nuevo proyecto.
1. Modificar [Link] como se muestra en Cdigo-3.30. El cambio aade un mtodo esttico que ser ocultado por la subclase. El fragmento
de cdigo que se require aadir se muestra en azul.
package mypeopleexample;
public class Person {
public Person() {
// [Link]("Person: constructor is called");
}
public Person(String name) {
[Link] = name;
// [Link]("Person: constructor 2 is called");
}
protected String name;
protected String address;
public String getName() {
return name;
}
public void setName(String name) {
[Link] = name;

}
public String getAddress() {
return address;
}
public void setAddress(String address) {
[Link] = address;
}
// A method that will be overridden by sub-class
public void myMethod(String t){
[Link]("myMethod(" + t + ") in Person class");
}
// A method that will be hidden by sub-class
public static void myStaticMethod(String t){
[Link]("myStaticMethod(" + t + ") in Person class");
}
}
Cdigo-3.30: [Link] con un mtodo esttico

2. Modificar [Link] como se muestra en Cdigo-3.31. El cambio aade un mtodo esttico que ser ocultado por la subclase. El
fragmento de cdigo que se require aadir se muestra en azul.
package mypeopleexample;
public class Student extends Person {
public Student() {
// [Link]("Student: constructor is called");
}
public Student(String name, String school, double grade) {
super(name);
[Link] = school;
[Link] = grade;
// [Link]("Student: constructor 2 is called");
}
protected String school;
protected double grade;
public String getSchool() {
return school;
}
public void setSchool(String school) {
[Link] = school;
}
public double getGrade() {
return grade;
}
public void setGrade(double grade) {
[Link] = grade;
}
// A overriding method
public void myMethod(String t){
[Link]("myMethod(" + t + ") in Student class");
}
// A method that will be hidden by sub-class
public static void myStaticMethod(String t){
[Link]("myStaticMethod(" + t + ") in Student class");
}
}
Cdigo-3.31: [Link] con un mtodo static

3. Modificar [Link] como se muestra en Cdigo-3.32. El cambio aade un mtodo esttico que ser ocultado por la
subclase. El fragmento de cdigo que se require aadir se muestra en azul.
package mypeopleexample;
public class InternationalStudent extends Student {
public InternationalStudent() {
// [Link]("InternationalStudent: constructor is called");
}
public InternationalStudent(String name, String school, double grade, String country) {

[Link] = name;
[Link] = school;
[Link] = grade;
[Link] = country;
// [Link]("InternationalStudent: constructor 2 is called");
}
private String country;
public String getCountry() {
return country;
}
public void setCountry(String country) {
[Link] = country;
}
// A overriding method
public void myMethod(String t){
[Link]("myMethod(" + t + ") in InternationalStudent class");
}
// A method that will be hidden by sub-class
public static void myStaticMethod(String t){
[Link]("myStaticMethod(" + t + ") in InternationalStudent class");
}
}
Cdigo-3.32: [Link] con un mtodo static

4. Modificar [Link] como se muestra en Cdigo-3.33. El cambio tiene como objetivo llamar mtodos ocultos y observar el tipo de mtodo
esttico invocado. El fragmento de cdigo que se require aadir se muestra en azul.
package mypeopleexample;
public class Main {
public static void main(String[] args) {
[Link]("---- Observe overriding behavior ----");
Person person1 = new Person();
[Link]("test1");
Student student1 = new Student();
[Link]("test2");
InternationalStudent internationalStudent1 =
new InternationalStudent();
[Link]("test3");
// Polymorphic behavior
[Link]("---- Observe polymorphic behavior ----");
Person person2 = new Student();
[Link]("test4");
Person person3 = new InternationalStudent();
[Link]("test5");
Student student2 = new InternationalStudent();
[Link]("test6");
// Calling hiding methods
[Link]("---- Observe how calling hiding methods work ----");
[Link]("test7");
[Link]("test8");
[Link]("test9");
}
}
Cdigo-3.33: [Link]
5. Compilar y ejecutar el programa.
Hacer click con el botn derecho en el proyecto MyPeopleExampleHidingMethods y seleccionar Run.
Observar el resultado en la ventana Output de NetBeans prestando atencin a la parte en negrita. (Figura-3.34 )
---- Observe overriding behavior ---myMethod(test1) in Person class
myMethod(test2) in Student class
myMethod(test3) in InternationalStudent class
---- Observe polymorphic behavior ---myMethod(test4) in Student class
myMethod(test5) in InternationalStudent class
myMethod(test6) in InternationalStudent class
---- Observe how calling hiding methods work ----

myStaticMethod(test7) in Person class


myStaticMethod(test8) in Person class
myStaticMethod(test9) in Student class
Figura-3.34: Resultado

Volver al inicio del ejercicio

Ejercicio 4: casting de tipos


En este ejercicio se mostrar el casting de tipos entre tipos de clases que estn relacionadas a travs de la herencia.
1. Casting de tipo implcito
2. Casting de tipo explcito con un runtime ClassCastException
3. Casting de tipo explcito sin un runtime ClassCastException

(4.1) Casting de tipo implcito


Se puede usar el proyecto MyPeopleExample para los cambios que se van a hacer en esta seccin o se puede crear un nuevo proyecto, por
ejemplo, MyPeopleExampleImplicitCasting, "copiando" el proyecto MyPeopleExample - Hacer click con el botn derecho en el proyecto
MyPeopleExample y seleccionar Copy Project. En lo que sigue se asume que se ha creado un nuevo proyecto.
1. Modificar the [Link] como se muestra en Cdigo-4.11. El cambio consiste en aadir unas cuantas sentencias en las que se realiza el
casting de tipo implcito entre tipos.
package mypeopleexample;
public class Main {
public static void main(String[] args) {
[Link]("---- Observe overriding behavior ----");
Person person1 = new Person();
[Link]("test1");
Student student1 = new Student();
[Link]("test2");
InternationalStudent internationalStudent1 =
new InternationalStudent();
[Link]("test3");
// Polymorphic behavior
[Link]("---- Observe polymorphic behavior ----");
// This is an implicit type casting between Student and Person class.
Person person2 = new Student(); // Example 1
person2 = student1;
// Example 2
[Link]("test4");
// This is an implicit type casting between InternationalStudent and Person class.
Person person3 = new InternationalStudent(); // Example 3
person3 = internationalStudent1;
// Example 4
[Link]("test5");
// This is an implicit type casting between InternationalStudent and Student class.
Student student2 = new InternationalStudent(); // Example 5
student2 = internationalStudent1;
// Example 6
[Link]("test6");
// Calling hiding methods
[Link]("---- Observe how calling hiding methods work ----");
[Link]("test7");
[Link]("test8");
[Link]("test9");
}
}
Cdigo-4.11: [Link]
2. Compilar y ejecutar el programa
Hacer click con el botn derecho en el proyecto MyPeopleExampleImplicitCasting y seleccionar Run.
Observar el resultado en la ventana Output de NetBeans. (Figura-4.12 )
---- Observe overriding behavior ---myMethod(test1) in Person class
myMethod(test2) in Student class
myMethod(test3) in InternationalStudent class
---- Observe polymorphic behavior ---myMethod(test4) in Student class
myMethod(test5) in InternationalStudent class
myMethod(test6) in InternationalStudent class
---- Observe how calling hiding methods work ---myStaticMethod(test7) in Person class

myStaticMethod(test8) in Person class


myStaticMethod(test9) in Student class
Figura-4.12: Resultado

Volver al inicio del ejercicio

(4.2) Casting de tipo explcito con un runtime ClassCastException


Se puede usar el proyecto MyPeopleExample para los cambios que se van a hacer en esta seccin o se puede crear un nuevo proyecto, por
ejemplo, MyTypeMismatchExampleProject1, "copiando" el proyecto MyPeopleExample - Hacer click con el botn derecho en el proyecto
MyPeopleExample y seleccionar Copy Project. En lo que sigue se asume que se ha creado un nuevo proyecto.
1. Modificar the [Link] como se muestra en Cdigo-4.21.
package mytypemismatchexampleproject;
public class Main {
public static void main(String[] args) {
// Implicit casting - Student object instance is
// type of Person.
Person person1 = new Student();
// Implicit casting - Teacher object instance is
// type of Person.
Person person2 = new Teacher();
// Explicit type casting.
Student student1 = (Student) person1;
// Explicit type casting - no compile error.
// But ClassCastException will occur during runtime.
Student student2 = (Student) person2;
}
}
Cdigo-4.21: Casting explcito con una exception potencial por mismatch en runtime

2. Compilar y ejecutar el programa


Hacer click con el botn derecho en el proyecto MyTypeMismatchExampleProject1 y seleccionar Run.
Observar que se produce una excepcin en tiempo de ejecucin [Link].

Figura-4.22: ocurrencia de [Link]


Volver al inicio del ejercicio

(4.3) Casting de tipo explcito sin un runtime ClassCastException


Se puede usar el proyecto MyPeopleExample para los cambios que se van a hacer en esta seccin o se puede crear un nuevo proyecto, por
ejemplo, MyTypeMismatchExampleProject2, "copiando" el proyecto MyPeopleExample - Hacer click con el botn derecho en el proyecto
MyPeopleExample y seleccionar Copy Project. En lo que sigue se asume que se ha creado un nuevo proyecto.
1. Modificar [Link] como se muestra en Cdigo-4.23. El fragmento de cdigo que se require aadir se muestra en azul.

package mytypemismatchexampleproject;
public class Main {
public static void main(String[] args) {
// Implicit casting - Student object instance is
// type of Person.
Person person1 = new Student();
// Implicit casting - Teacher object instance is
// type of Person.
Person person2 = new Teacher();
// Explicit type casting.
Student student1 = (Student) person1;
// Do the casting only when the type is verified
if (person2 instanceof Student) {
Student student2 = (Student) person2;
[Link]("person2 instanceof Student = " + true);
} else{

[Link]("person2 instanceof Student = " + false);


}
}
}
Cdigo-4.23: Uso del operador instanceOf para comprobar el tipo de la instancia del objeto
2. Compilar y ejecutar el programa.
Hacer click con el botn derecho en el proyecto MyTypeMismatchExampleProject2 y seleccionar Run.
Observar el resultado en la ventana Output. (Figura-4.24 )
person2 instanceof Student = false
Figura-4.24: Resultado

Volver al inicio del ejercicio

Resumen
En este ejercicio se ha visto cmo hacer un casting implcit y explcito entre instancias de objetos que estn relacionados a travs de la herencia.
Volver al inicio

Ejercicio 5: Clases Final y mtodos Final


Este ejercicio muestra el concepto de clase final y mtodo final.
1. Compilar y ejecutar un programa Java con una clase final
2. Prueba de extender la clase String o la clase Wrapper
3. Compilar y ejecutar un programa Java con un mtodo final

(5.1) Compilar y ejecutar un programa Java con una clase final


1. Crear un proyecto NetBeans
Seleccionar File->New Project (Ctrl+Shift+N). El dilogo New Project aparece.
En la seccin Choose Project seleccionar Java en la seccin Categories y Java Application en la seccin Projects.
Pulsar en Next.
En el campo Project Name escribir MyFinalClassExample.
Click Finish.

Observar que aparece el nodo del proyecto MyFinalClassExample se crea en la seccin Projects del IDE NetBeans y que se muestra
[Link] en la ventana del editor del IDE.
2. Escribir [Link].
Hacer click con el botn derecho en el proyecto MyFinalClassExample y seleccionar New->Java Class.
Observar que aparece el cuadro de dilogo New Java Class con la seccin Name and Location.
En el campo Class Name escribir Person.
En el campo Package, escribir myfinalclassexample o seleccionar myfinalclassexample a partir del men desplegable .
Click Finish.

Observar que se genera y muestra en la ventana del editor [Link].


Modificar [Link] como se muestra en Cdigo-5.10. Notar que la clase Person es una clase final, lo que significa que no se puede
extender.
package myfinalclassexample;
// Make the Person class as a final class
public final class Person {
}
Cdigo-5.10: [Link] como clase final

3. Escribir [Link].
Hacer click con el botn derecho en el proyecto MyFinalClassExample y seleccionar New->Java Class.
Observar que aparece el cuadro de dilogo New Java Class con la seccin Name and Location.
En el campo Class Name escribir Teacher.
En el campo Package, escribir myfinalclassexample o seleccionar myfinalclassexample a partir del men desplegable .
Click Finish.

Observar que se genera y muestra en la ventana del editor [Link].


Modificar [Link] como se muestra en Cdigo-5.11. El cambio extiende la clase Person class, lo que producir un error de
compilacin.
package myfinalclassexample;
/**
*
* @author sang
*/
public class Teacher extends Person{
}
Cdigo-5.11: [Link]
4. Observar el error de compilacin. (Figura-5.12 )

Figura-5.12: Error de compilacin

Volver al inicio del ejercicio

(5.2) Prueba de extender la clase String o la clase Wrapper


1. Crear un proyecto NetBeans
Seleccionar File->New Project (Ctrl+Shift+N). El dilogo New Project aparece.
En la seccin Choose Project seleccionar Java en la seccin Categories y Java Application en la seccin Projects.
Pulsar en Next.
Observar que aparece la seccin Name and Location.
En el campo Project Name escribir MyFinalClassExample2.
Click Finish.

Observar que aparece el nodo del proyecto MyFinalClassExample2 se crea en la seccin Projects del IDE NetBeans y que se muestra
[Link] en la ventana del editor del IDE.
2. Escribir [Link].
Hacer click con el botn derecho en el proyecto MyFinalClassExample y seleccionar New->Java Class.
Observar que aparece el cuadro de dilogo New Java Class con la seccin Name and Location.
En el campo Class Name escribir Teacher.
En el campo Package, escribir myfinalclassexample2 o seleccionar myfinalclassexample2 a partir del men desplegable .
Click Finish.

Observar que se genera y muestra en la ventana del editor [Link].


Modificar [Link] como se muestra en Cdigo-5.21. El cambio es para extender la clase String class, lo que produce un errror de
compilacin.
package myfinalclassexample2;
/**
*

* @author
*/
public class Teacher extends String{
}
Cdigo-5.21: [Link]
3. Observar el error de compilacin.

Figura-5.22: Error de compilacin


4. Mostrar Javadoc de la clase String para comprobar que la clase String es una clase final.
Mover el cursor a String y con el botn derecho seleccionar Show Javadoc.

Observar que se muestra el Javadoc de la clase String.


Notar que la clase String es una clase final. (Figura-5.23 )

Figura-5.23: Javadoc de la clase String, indica que es una clase final


t.
Volver al inicio del ejercicio

(5.3) Compilar y ejecutar un programa Java con un mtodo final


1. Crear un proyecto NetBeans
Seleccionar File->New Project (Ctrl+Shift+N). El dilogo New Project aparece.
En la seccin Choose Project seleccionar Java en la seccin Categories y Java Application en la seccin Projects.
Pulsar en Next.
En la seccin Name and Location, del campo Project Name, escribir MyFinalMethodExample.
Click Finish.
Observar que aparece el nodo del proyecto MyFinalMethodExample se crea en la seccin Projects del IDE NetBeans y que se muestra
[Link] en la ventana del editor del IDE.
2. Escribir [Link].
Hacer click con el botn derecho en el proyecto MyFinalMethodExample y seleccionar New->Java Class.
Observar que aparece el cuadro de dilogo New Java Class con la seccin Name and Location.
En el campo Class Name escribir Person.
En el campo Package, escribir myfinalmethodexample o seleccionar myfinalmethodexample a partir del men desplegable .
Click Finish.

Observar que se genera y muestra en la ventana del editor [Link].


Modificar [Link] como se muestra en Cdigo-5.30. Notar que el mtodo myMethod es un mtodo final, lo que significa que no se
puede usar (override) en una subclase.
package myfinalmethodexample;
public class Person {
// myMethod() is a final method
public final void myMethod(){
}
}
Cdigo-5.30: [Link] tiene un mtodo final

3. Escribir [Link].
Hacer click con el botn derecho en el proyecto MyFinalMethodExample y seleccionar New->Java Class.
Observar que aparece el cuadro de dilogo New Java Class con la seccin Name and Location.
En el campo Class Name escribir Teacher.
En el campo Package, escribir myfinalmethodexample o seleccionar myfinalmethodexample a partir del men desplegable .
Click Finish.
Observar que se genera y muestra en la ventana del editor [Link].
Modificar [Link] como se muestra en Cdigo-5.31. El cambio es para que la clase Teacher derive de la clase Person y hacer un
override de myMethod() de la clase Person, lo que produce un errror de compilacin.
package myfinalmethodexample;
public class Teacher extends Person{
// Try to override this method
public void myMethod(){
}
}
Cdigo-5.31: [Link]
4. Observar el error de compilacin. (Figura-5.32 )

Figura-5.32: Error de compilacin


Volver al inicio del ejercicio

Resumen
En este ejercicio se ha visto que una clase final no se puede derivar y que un mtodo final no se puede hacer overridden por una subclaseb.
Volver al inicio

Ejercicio 6: Desarrollo de un programa simple que usa herencia


En este ejercicio se desarrolla un programa simple usando varias clases que estn relacionadas mediante la herencia. La clase Product es
heredadad por las clases Electronics y Book. La clase Electronics es derivada por las clases MP3Player y TV. Tambin se ve cmo aadir
comportamiento polimrfico al programa a travs del overriding de mtodos.
1. Construir el programa MyOnlineShop

(6.1) Construir el programa MyOnlineShop


1. Crear un proyecto NetBeans
Seleccionar File->New Project (Ctrl+Shift+N). El dilogo New Project aparece.
En la seccin Choose Project seleccionar Java en la seccin Categories y Java Application en la seccin Projects.
Pulsar en Next.
Observe that the Name and Location pane appears.
For the Project Name field, enter MyOnlineShop.
Hacer click en Finish.
2. Escribir [Link].
Hacer click con el botn derecho en el proyecto MyOnlineShop y seleccionar New->Java Class.
Observar que aparece el cuadro de dilogo New Java Class con la seccin Name and Location.
En el campo Class Name escribir Product.
En el campo Package, escribir myonlineshop o seleccionar myonlineshopa partir del men desplegable .

Hacer click en Finish.


Observar que se genera y muestra en la ventana del editor [Link].
Modificar [Link] como se muestra en Cdigo-6.10.
package myonlineshop;
public class Product {
private double regularPrice;
/** Creates a new instance of Product */
public Product(double regularPrice) {
[Link] = regularPrice;
}
// Method that will be overridden
public double computeSalePrice(){
return 0;
}
public double getRegularPrice() {
return regularPrice;
}
public void setRegularPrice(double regularPrice) {
[Link] = regularPrice;
}
}
Cdigo-6.10: [Link]
3. Escribir [Link].
Hacer click con el botn derecho en el proyecto MyFinalClassExample y seleccionar New->Java Class.
Observar que aparece el cuadro de dilogo New Java Class con la seccin Name and Location.
En el campo Class Name escribir Electronics.
En el campo Package, escribir myonlineshop o seleccionar myonlineshop a partir del men desplegable .
Click Finish.
Observar que se genera y muestra en la ventana del editor [Link].
Modificar [Link] como se muestra en Cdigo-6.11. Notar que la clase Electronics extiende la clase Product.
package myonlineshop;
public class Electronics extends Product{
private String manufacturer;
/** Creates a new instance of Electronics */
public Electronics(double regularPrice,
String manufacturer) {
super(regularPrice);
[Link] = manufacturer;
}
// Override this method
public double computeSalePrice(){
return [Link]() * 0.6;
}
public String getManufacturer() {
return manufacturer;
}
public void setManufacturer(String manufacturer) {
[Link] = manufacturer;
}
}
Cdigo-6.11: [Link]
4. Escribir [Link].
Hacer click con el botn derecho en el proyecto MyFinalClassExample y seleccionar New->Java Class.
Observar que aparece el cuadro de dilogo New Java Class con la seccin Name and Location.
En el campo Class Name escribir MP3Player.
En el campo Package, escribir myonlineshop o seleccionar myonlineshop a partir del men desplegable .
Click Finish.
Observar que se genera y muestra en la ventana del editor [Link].
Modificar [Link] como se muestra en Cdigo-6.12. Note that MP3Player class extends Electronics class. Notar que la clase
MP3Player tiene un mtodo computeSalePrice() que es un mtodo overriding.
package myonlineshop;
public class MP3Player extends Electronics{

private String color;


/**
* Creates a new instance of MP3Player
*/
public MP3Player(double regularPrice,
String manufacturer,
String color) {
super(regularPrice, manufacturer);
[Link] = color;
}
// Override this method
public double computeSalePrice(){
return [Link]() * 0.9;
}
public String getColor() {
return color;
}
public void setColor(String color) {
[Link] = color;
}
}
Cdigo-6.12: [Link]
5. Escribir [Link].
Hacer click con el botn derecho en el proyecto MyFinalClassExample y seleccionar New->Java Class.
Observar que aparece el cuadro de dilogo New Java Class con la seccin Name and Location.
En el campo Class Name escribir TV.
En el campo Package, escribir myonlineshop o seleccionar myonlineshop a partir del men desplegable .
Click Finish.
Observar que se genera y muestra en la ventana del editor [Link].
Modificar [Link] como se muestra en Cdigo-6.14. Notar que la clase TV extiende la clase Electronics. Notar tambin que la clase TV
tiene un mtodo computeSalePrice() que es un mtodo overriding.
package myonlineshop;
public class TV extends Electronics {
int size;
/** Creates a new instance of TV */
public TV(double regularPrice,
String manufacturer,
int size) {
super(regularPrice, manufacturer);
[Link] = size;
}
// Override this method
public double computeSalePrice(){
return [Link]() * 0.8;
}
}
Cdigo-6.14: [Link]
6. Escribir [Link].
Hacer click con el botn derecho en el proyecto MyFinalClassExample y seleccionar New->Java Class.
Observar que aparece el cuadro de dilogo New Java Class con la seccin Name and Location.
En el campo Class Name escribir Book.
En el campo Package, escribir myonlineshop o seleccionar myonlineshop a partir del men desplegable .
Click Finish.
Observar que se genera y muestra en la ventana del editor [Link].
Modificar [Link] como se muestra en Cdigo-6.15. Notar que la clase Book extiende la clase Product. Notar que la clase Book
tambin tiene el mtodo computeSalePrice() que es un mtodo overriding.
package myonlineshop;
public class Book extends Product{
private String publisher;
private int yearPublished;
/** Creates a new instance of Book */
public Book(double regularPrice,
String publisher,
int yearPublished) {
super(regularPrice);
[Link] = publisher;
[Link] = yearPublished;

}
// Override this method
public double computeSalePrice(){
return [Link]() * 0.5;
}
public String getPublisher() {
return publisher;
}
public void setPublisher(String publisher) {
[Link] = publisher;
}
public int getYearPublished() {
return yearPublished;
}
public void setYearPublished(int yearPublished) {
[Link] = yearPublished;
}
}
Cdigo-6.15: [Link]
7. Modificar [Link] como se muestra en Cdigo-6.16. Estudiar el cdigo prestando atencin a los comentarios en negrita:
package myonlineshop;
public class Main {
public static void main(String[] args) {
// Declare and create Product array of size 5
Product[] pa = new Product[5];
// Create object instances
pa[0] = new TV(1000, "Samsung", 30);
pa[1] = new TV(2000, "Sony", 50);
pa[2] = new MP3Player(250, "Apple", "blue");
pa[3] = new Book(34, "Sun press", 1992);
pa[4] = new Book(15, "Korea press", 1986);
// Compute total regular price and total
// sale price.
double totalRegularPrice = 0;
double totalSalePrice = 0;
for (int i=0; i<[Link]; i++){
// Call a method of the super class to get
// the regular price.
totalRegularPrice += pa[i].getRegularPrice();
// Since the sale price is computed differently
// depending on the product type, overriding
// method of the object instance of the sub-class
// gets invoked. This is runtime polymorphic
// behavior.
totalSalePrice += pa[i].computeSalePrice();
[Link]("Item number " + i +
": Type = " + pa[i].getClass().getName() +
", Regular price = " + pa[i].getRegularPrice() +
", Sale price = " + pa[i].computeSalePrice());
}
[Link]("totalRegularPrice = " + totalRegularPrice);
[Link]("totalSalePrice = " + totalSalePrice);
}
}
Cdigo-6.16: [Link]
8. Compilar y ejecutar el programa.
Hacer click con el botn derecho en el proyecto MyOnlineShop y seleccionar Run.
Observar el resultado en la ventana Output . (Figura-6.17 )
Item number 0: Type = [Link], Regular price = 1000.0, Sale price = 800.0
Item number 1: Type = [Link], Regular price = 2000.0, Sale price = 1600.0
Item number 2: Type = myonlineshop.MP3Player, Regular price = 250.0, Sale price = 225.0
Item number 3: Type = [Link], Regular price = 34.0, Sale price = 17.0
Item number 4: Type = [Link], Regular price = 15.0, Sale price = 7.5
totalRegularPrice = 3299.0
totalSalePrice = 2649.5

Figura-6.17: Resultado
9. Como ejercicio, modificar MyOnlineShop como sigue:
Aadir la clase Camera como una subclase de la clase Electronics
Calcular el precio de venta de Camera con la siguiente lgica de negocio
Regular price * 0.7
En [Link], inicializar dos objetos de la clase Camera
10. Como ejercicio, modificar MyOnlineShop como sigue:
Aadir otro mtodo overriding a las clases como sigue
double computeSpecialCustomerPrice()
La lgica de clculo debe ser como sigue:
Para TV, restar 100 al precio de venta
Para MP3Player, restar 15 al precio de venta
Para Book,restar 2 al precio de venta
En [Link], mostrar Special Customer Price para cada artculo de los productos
Resumen
En este ejercicio se ha desarrollado un programa simple que usa varias clases que estn relacionadas mediante la herencia. Se ha probado un
comportamiento polimrfico a travs de mtodos sobrecargados.
Volver al inicio

Tarea
1. Crear un proyecto NetBeans llamado "MyOwnAutoShopProject" como sigue:
Crear una superclase llamada Car. La clase Car tiene los siguientes campos y mtodos.
int speed;
double regularPrice;
String color;
double getSalePrice();
Crear una subclase de Car y llamarla Truck. La clase Truck tiene los siguientes campos y mtodos.
int weight;
double getSalePrice(); // If weight > 2000, 10% discount. Otherwise, 20% discount.
Crear una subclase de Car y llamarla Ford. La clase Ford tiene los siguientes campos y mtodos
int year;
int manufacturerDiscount;
double getSalePrice(); // al precio de venta calculado de la clase Car class, restar manufacturerDiscount.
Crear una subclase de Car y llamarla Sedan. La clase Sedan tiene los siguientes campos y mtodos.
int length;
double getSalePrice(); // If length > 20 feet, 5% discount, Otherwise, 10% discount.
Crear la clase MyOwnAutoShop que contiene el mtodo main(). Realizar lo siguiente dentro del mtodo main().
Crear un objeto de la clase Sedan e inicializar todos los campos con valores apropiados. Usar el mtodo super(...) en el constructor
para inicializar los campos de la super clase.
Crear dos objetos de la clase Ford e inicializar todos los campos con valores apropiados. Usar super(...) en el constructor para
inicializar los campos de la super clase.
Crear un objeto de la clase Car e inicializar todos los campos con valores apropiados.
Mostrar los precios de venta de todas las instancias.

También podría gustarte