Sie sind auf Seite 1von 109

2003 Prentice Hall, Inc. Todos los derechos reservados.

Captulo 9 - Programacin orientada a


objetos: Herencia
Contorno
9.1 Introduccin
9.2 Superclases y subclases
9.3 Los miembros protegidos
9.4 Relacin entre Superclases y subclases
9.5 Estudio de caso: Tres Niveles Jerarqua de herencia
9.6 Constructores y finalizadores en subclases
9.7 Ingeniera del Software con la herencia

2003 Prentice Hall, Inc. Todos los derechos reservados.

9.1 Introduccin

Herencia
Reusabilidad del software
Crear nueva clase de clase existente

Absorber 'clase existente s de datos y comportamientos

Mejorar con nuevas capacidades

Subclase extiende superclase


Subclase

Grupo ms especializado de objetos

Los comportamientos heredados de superclase

Puede personalizar
Comportamientos adicionales

2003 Prentice Hall, Inc. Todos los derechos reservados.

9.1 Introduccin
Jerarqua de clases
Superclase directa
Se hereda de forma explcita (un nivel superior jerarqua)

Superclase indirecta
Jerarqua de dos o ms niveles hasta Heredado

Herencia individual
Hereda de una superclase

La herencia mltiple
Hereda de varias superclases
Java no soporta herencia mltiple

2003 Prentice Hall, Inc. Todos los derechos reservados.

9.1 Introduccin

Abstraccin
Centrarse en los aspectos comunes entre los objetos en el sistema

"Es-un" frente "tiene-un"


"Es un"

Herencia

objeto subclase tratado como objeto superclase

Ejemplo: coche es un vehculo

Propiedades de vehculos / comportamientos tambin


propiedades de automviles / comportamientos

"Tiene un"

Composicin

Objeto contiene uno o ms objetos de otras clases como miembros

Ejemplo: Car tiene un volante

2003 Prentice Hall, Inc. Todos los derechos reservados.

9.2 Superclases y subclases


Superclases y subclases

Objeto de una clase "es un" objeto de otra clase

Ejemplo: rectngulo es un cuadriltero.

Clase Rectangle hereda de la clase Cuadriltero

Cuadriltero: superclase

Rectngulo: subclase

Superclase representa tpicamente mayor conjunto de objetos que


subclases

Ejemplo:
superclase: Vehculo
Coches, camiones, barcos, bicicletas, ...
subclase: Coche
Ms pequeo subconjunto, ms especfico de vehculos

2003 Prentice Hall, Inc. Todos los derechos reservados.

9.2 Superclases y subclases (Cont.)


Ejemplos de herencia

2003 Prentice Hall, Inc. Todos los derechos reservados.

9.2 Superclases y subclases (Cont.)


Jerarqua de herencia
Relaciones de herencia: rbol-como la estructura de jerarqua

Cada clase se convierte en


superclase
Datos de la fuente / comportamientos a otras clases

Oregn

subclase
Heredar de datos / comportamientos de otras clases

2003 Prentice Hall, Inc. Todos los derechos reservados.

Fig. 9.2 jerarqua de herencias de CommunityMembers universitarios.


CommunityMember
Empleado
Estudiante
Personal
Facultad
Administrador

Profesor
Antiguo alumno

2003 Prentice Hall, Inc. Todos los derechos reservados.

Fig. 9.3 jerarqua de herencias de Formas.


Forma
TwoDimensionalShape
ThreeDimensionalShape
Crculo
Cuadrado
Tringulo
Esfera
Cubo

Tetraedro
2003 Prentice Hall, Inc. Todos los derechos reservados.

10

9.3 Los miembros protegidos


acceso protegido
Nivel intermedio de proteccin entre lo pblico y lo privado
miembros protegidos accesibles a

miembros superclase

miembros de subclases

Miembros de la clase en el mismo paquete

Acceso Subclase miembro superclase


Sper palabras clave y un punto (.)

2003 Prentice Hall, Inc. Todos los derechos reservados.

11

9.4 Relacin entre Superclases y subclases


Superclase y subclase relacin

Ejemplo: jerarqua de herencia / crculo del punto

Punto

xy par de coordenadas

Crculo

xy par de coordenadas

Radio

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
12

Point.java

Lneas 5-6
Mantener xey coordenadas como variables de instancia privada.

Lnea 11
Llamada implcita a Object constructor
1 // Fig. 9.4: Point.java
2 declaracin de la clase // Punto representa un par de coordenadas xy.
3
4 Punto public class {
5

private int x; // x parte del par de coordenadas

int y privado; // parte y del par de coordenadas

7
8

// Constructor sin argumentos

Point pblico ()

10 {
11

// Llamada implcita al constructor de objetos se produce aqu

12}
13
14

// Constructor

15

Punto pblico (int xValue, int yValue)

16 {
17

// Llamada implcita al constructor de objetos se produce aqu

18 x = xValue; // sin necesidad de validacin


19 y = yValue; // sin necesidad de validacin
20}
21
22

// Establecer x en par de coordenadas

23

setX public void (int xValue)

24 {

25 x = xValue; // sin necesidad de validacin


26}
27

Mantener xey coordenadas como variables de instancia privada.


Llamada implcita a Object constructor

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
13

Point.java

Lneas 47-50
Invalidar mtodo toString de la clase Object.
28

// Devuelve x del par de coordenadas

29

public int getX ()

30 {
31

return x;

32}
33
34

// Conjunto y en el par de coordenadas

35

pblica setY void (int yValue)

36 {
37 y = yValue; // sin necesidad de validacin
38}
39
40

// Devuelve y del par de coordenadas

41

public int getY ()

42 {
43

volver y;

44}
45
46

// Devuelve representacin String del objeto Point

47

public String toString ()

48 {
49

retorno "[" + X + "," + y + "]";

50}
51
52} // fin Point clase

Mtodo de anulacin toString de la clase Object


2003 Prentice Hall, Inc.
Todos los derechos reservados.

Contorno
14

PointTest.java

Lnea 9
Instanciar objeto Point

Lneas 15-16
Cambie el valor de X e Y las coordenadas del punto

Lnea 19
Implcitamente llamar al mtodo toString de punto
1 // Fig. 9.5: PointTest.java
2 // Prueba Point clase.

Javax.swing.JOptionPane 3 de importacin;
4
5 public class PointTest {
6
7

principales (String [] args) void estticos pblicos

8{
9 punto Point = new Point (72, 115); // crea objeto Point
10
11

// Obtener coordenadas de punto

12 String salida = "coordenada X es" + point.getX () +


13

"\ NY coordenada es" + point.getY ();

14
15 point.setX (10); // conjunto coordenada x

16 point.setY (20); // establece coordenada


17
18

// Obtener representacin String del nuevo valor del punto

19 salida + = "\ n \ nLa nueva ubicacin del punto es" + punto;


20
21 JOptionPane.showMessageDialog (null, salida); // salida de la pantalla
22
23 System.exit (0);
24
25} // fin principal
26
27} // fin de la clase PointTest

Instanciar objeto Point

Cambie el valor de X e Y las coordenadas del punto

Implcitamente llamar al mtodo toString de punto


2003 Prentice Hall, Inc.
Todos los derechos reservados.

Contorno
15

Circle.java

Lneas 5-7
Mantener coordenadas x e y y el radio como variables de instancia privada.

Lneas 25-28
Cdigo similar al cdigo de Punto Nota.
1 // Fig. 9.6: Circle.java

2 // clase Circle contiene xy par de coordenadas y el radio.


3
4 Crculo public class {
5

private int x; // coordenada x del centro del crculo

int y privado; // coordenada y del centro del crculo

doble radio privada; // el radio del crculo

8
9

// Constructor sin argumentos

10

Crculo pblica ()

11 {
12
13}
14

// Llamada implcita al constructor de objetos se produce aqu

15

// Constructor

16

Crculo pblico (int xValue, int yValue, doble radiusValue)

17 {
18

// Llamada implcita al constructor de objetos se produce aqu

19 x = xValue; // sin necesidad de validacin


20 y = yValue; // sin necesidad de validacin
21 setRadius (radiusValue);
22}
23
24

// Establecer x en par de coordenadas

25

setX public void (int xValue)

26 {
27 x = xValue; // sin necesidad de validacin

28}
29

Mantener coordenadas xy y radio como variables de instancia privada.

Cdigo similar al cdigo de Punto Nota.


2003 Prentice Hall, Inc.
Todos los derechos reservados.

Contorno
16

Circle.java

Lneas 31-47
Cdigo similar al cdigo de Punto Nota.

Lnea 51
Asegurar valor no negativo para el radio.
30

// Devuelve x del par de coordenadas

31

public int getX ()

32 {
33

return x;

34}
35
36

// Conjunto y en el par de coordenadas

37

pblica setY void (int yValue)

38 {
39 y = yValue; // sin necesidad de validacin
40}

41
42

// Devuelve y del par de coordenadas

43

public int getY ()

44 {
45

volver y;

46}
47
48

// Radio set

49

pblica setRadius void (doble radiusValue)

50 {
51 radio = (radiusValue <0.0 0.0:? RadiusValue);
52}
53

54

// Radio de regreso

55

doble getRadius pblica ()

56 {
57

volver radio;

58}
59

Cdigo similar al cdigo de Punto Nota.


Asegurar valor no negativo para el radio.

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
17

Circle.java
60

// Calcular y dimetro volver

61

doble getDiameter pblica ()

62 {
63

retorno 2 * radio;

64}
65
66

// Calcular y devolver la circunferencia

67

doble getCircumference pblica ()

68 {
69

volver Matemticas PI * getDiameter (.);

70}
71
72

// Calcular y rea de regresar

73

doble getArea pblica ()

74 {
75

volver Matemticas PI * radio * radio.;

76}
77
78

// Devuelve representacin String del objeto Circle

79

public String toString ()

80 {
81

retorno "Centro = [" + x + "," + y + "]; Radio =" + radio;

82}
83

84} // fin del crculo de la clase


2003 Prentice Hall, Inc.
Todos los derechos reservados.

Contorno

18

CircleTest.java

Lnea 10
Crear objeto Circle

Lneas 17-19
Utilice mtodos set para modificar variable de instancia privada

Lnea 23
Explcitamente llamar al mtodo toString del crculo
1 // Fig. 9.7: CircleTest.java
2 // Prueba Crculo clase.
Java.text.DecimalFormat 3 de importacin;

Javax.swing.JOptionPane 4 de importacin;
5
6 public class CircleTest {
7
8 principales (String [] args) void estticos pblicos
9{
10 Crculo crculo = new Circle (37, 43, 2.5); // crea objeto Circle
11
12

// Obtener coordenadas xy iniciales de crculo y radio

13 String salida = "coordenada X es" + circle.getX () +


14

"\ NY coordenada es" + circle.getY () +

15

"\ NRadius es" + circle.getRadius ();

16

17 circle.setX (35); // establecer nuevos coordenada x


18 circle.setY (20); // establece nueva coordenada
19 circle.setRadius (4,25); // establecer nuevo radio
20
21

// Obtener representacin String del nuevo valor crculo

22 salida + = "\ n \ nLa nueva ubicacin y el radio del crculo son \ n" +
23 circle.toString ();
24
25

// valores de punto flotante formato con 2 dgitos de precisin

26 twoDigits DecimalFormat = nueva DecimalFormat ("0,00");


27

Crear objeto Circle.


Utilice mtodos set para modificar variable de instancia privada.
Explcitamente llamar al mtodo toString del crculo

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
19

CircleTest.java

Lneas 29-37

Utilice obtener mtodos para obtener del crculo de dimetro, circunferencia y rea.
28

// Obtener el dimetro del crculo

29 salida + = "\ nDiameter es" +


30 twoDigits.format (circle.getDiameter ());
31
32

// Obtener la circunferencia del crculo

33 salida + = "\ nCircumference es" +


34 twoDigits.format (circle.getCircumference ());
35
36

// Obtener el rea del crculo

37 salida + = "\ nArea es" + twoDigits.format (circle.getArea ());


38
39 JOptionPane.showMessageDialog (null, salida); // salida de la pantalla
40
41 System.exit (0);
42
43} // fin principal
44
45} // fin de la clase CircleTest

Utilice obtener mtodos para obtener del crculo de dimetro, circunferencia y rea.
2003 Prentice Hall, Inc.
Todos los derechos reservados.

Contorno
20

Circle2.java

Lnea 4
Clase circle2 extiende Point clase.

Lnea 5
Mantener instancia privada radio variable.

Lneas 17-18

Si intenta acceder a variables de instancia privadas x del punto superclase y resultados anuales en los
errores de sintaxis.
1 // Fig. 9.8: Circle2.java
2 clase // circle2 hereda de Punto.
3
4 public class circle2 extiende Point {
5 doble radio privada; // radio de circle2
6
7 // Constructor sin argumentos
8 circle2 pblica ()
9{
10
11}

// Llamada implcita al punto constructor ocurre aqu

12
13

// Constructor

14

pblica circle2 (int xValue, int yValue, doble radiusValue)

15 {
16

// Llamada implcita al punto constructor ocurre aqu

17 x = xValue; // no permitido: x privado en Point


18 y = yValue; // no permitido: y privado en Point
19 setRadius (radiusValue);
20}
21
22

// Radio set

23

pblica setRadius void (doble radiusValue)

24 {

25 radio = (radiusValue <0.0 0.0:? RadiusValue);


26}
27

Clase circle2 extiende Point clase.


Mantener instancia privada radio variable.
Si intenta acceder a variables de instancia privadas x del punto superclase y resultados anuales en los
errores de sintaxis.

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
21
34

// Calcular y dimetro volver

35

doble getDiameter pblica ()

36 {

37

retorno 2 * radio;

38}
39
40

// Calcular y devolver la circunferencia

41

doble getCircumference pblica ()

42 {
43

volver Matemticas PI * getDiameter (.);

44}
45
46

// Calcular y rea de regresar

47

doble getArea pblica ()

48 {
49

volver Matemticas PI * radio * radio.;

50}
51
52

// Devuelve representacin String del objeto Circle

53

public String toString ()

54 {
55

// Uso de x e y no pueden: x e y privado en Point

56

retorno "Centro = [" + x + "," + y + "]; Radio =" + radio;

57}
58
59} // fin de la clase circle2

Circle2.java

Lnea 56

Si intenta acceder a variables de instancia privadas x del punto superclase y resultados anuales en los
errores de sintaxis.
Si intenta acceder a variables de instancia privadas x del punto superclase y resultados anuales en los

errores de sintaxis.
2003 Prentice Hall, Inc.
Todos los derechos reservados.

Contorno
22

Circle2.java
salida

Si intenta acceder a variables de instancia privadas x del punto superclase y resultados anuales en los
errores de sintaxis.
Circle2.java:17: x tiene acceso privado en Point

x = xValue; // No permitido: x privado en Point


^
Circle2.java:18: y tiene acceso privado en Point
y = yValue; // No se permiten: y privado en Point
^
Circle2.java:56: x tiene acceso privado en Point
return "Centro = [" + x + "," + y + "]; Radio =" + radio;
^
Circle2.java:56: y tiene acceso privado en Point
return "Centro = [" + x + "," + y + "]; Radio =" + radio;
^
4 errores

Si intenta acceder a variables de instancia privadas x del punto superclase y resultados anuales en los
errores de sintaxis.

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
23

Point2.java

Lneas 5-6
Mantener xey coordenadas como variables de instancia protegidas, accesibles a las subclases.
1 // Fig. 9.9: Point2.java
2 declaracin de la clase // Point2 representa un par de coordenadas xy.
3
4 public class Point2 {

protegido int x; // x parte del par de coordenadas

int y protegida; // parte y del par de coordenadas

7
8

// Constructor sin argumentos

Point2 pblica ()

10 {
11

// Llamada implcita al constructor de objetos se produce aqu

12}
13
14

// Constructor

15

Point2 pblico (int xValue, int yValue)

16 {
17

// Llamada implcita al constructor de objetos se produce aqu

18 x = xValue; // sin necesidad de validacin


19 y = yValue; // sin necesidad de validacin
20}
21
22

// Establecer x en par de coordenadas

23

setX public void (int xValue)

24 {
25 x = xValue; // sin necesidad de validacin
26}
27

Mantener xey coordenadas como variables de instancia protegidas, accesibles a las subclases.
2003 Prentice Hall, Inc.
Todos los derechos reservados.

Contorno

24

Point2.java
28

// Devuelve x del par de coordenadas

29

public int getX ()

30 {
31

return x;

32}
33
34

// Conjunto y en el par de coordenadas

35

pblica setY void (int yValue)

36 {
37 y = yValue; // sin necesidad de validacin
38}

39
40

// Devuelve y del par de coordenadas

41

public int getY ()

42 {
43

volver y;

44}
45
46

// Devuelve representacin String del objeto Point2

47

public String toString ()

48 {
49
50}
51

retorno "[" + X + "," + y + "]";

52} // fin de la clase Point2


2003 Prentice Hall, Inc.
Todos los derechos reservados.

Contorno
25

Circle3.java
Lnea 5
Clase Circle3 hereda de la clase Point2.

Lnea 6
Mantener las variables de instancia privada radio.

Lneas 11 y 17
Implcitamente llamar constructor por defecto de la superclase.

Lneas 18-19
Modificar heredadas instancia variables x e y, declarada protegida en superclase Point2.
1 // Fig. 9.10: Circle3.java
2 // clase Circle3 hereda de Point2 y tiene acceso a Point2
3 // protegidas miembros x e y.
4
5 public class Circle3 extiende Point2 {
6

doble radio privada; // radio de Circle3

7
8

// Constructor sin argumentos

Circle3 pblico ()

10 {
11

// Llamada implcita al constructor Point2 ocurre aqu

12}
13
14

// Constructor

15

pblica Circle3 (int xValue, int yValue, doble radiusValue)

16 {
17

// Llamada implcita al constructor Point2 ocurre aqu

18 x = xValue; // sin necesidad de validacin


19 y = yValue; // sin necesidad de validacin
20 setRadius (radiusValue);
21}
22
23

// Radio set

24

pblica setRadius void (doble radiusValue)

25 {
26 radio = (radiusValue <0.0 0.0:? RadiusValue);
27}
28

Clase Circle3 hereda de la clase Point2.


Mantener las variables de instancia privada radio.
Pide Implcitamente constructor por defecto de superclase.

Modificar heredadas instancia variables x e y, declarada protegida en superclase Point2.


2003 Prentice Hall, Inc.
Todos los derechos reservados.

Contorno
26

Circle3.java

Lnea 56
Acceso heredado de instancia variables x e y, declarada protegida en superclase Point2.
29

// Radio de regreso

30

pblico doble getRadius ()

31 {
32

volver radio;

33}
34
35

// Calcular y dimetro volver

36

doble getDiameter pblica ()

37 {
38
39}

retorno 2 * radio;

40
41

// Calcular y devolver la circunferencia

42

doble getCircumference pblica ()

43 {
44

volver Matemticas PI * getDiameter (.);

45}
46
47

// Calcular y rea de regresar

48

doble getArea pblica ()

49 {
50
51}
52

volver Matemticas PI * radio * radio.;

53

// Devuelve representacin String del objeto Circle3

54

public String toString ()

55 {
56

retorno "Centro = [" + x + "," + y + "]; Radio =" + radio;

57}
58
59} // fin de la clase Circle3

Acceso heredado de instancia variables x e y, declarada protegida en superclase Point2.


2003 Prentice Hall, Inc.
Todos los derechos reservados.

Contorno
27
Circletest3.java
Lnea 11

Crear objeto Circle3.


Lneas 14-15
Utilice mtodos get heredados acceder heredadas protegidas instancia variables x e y.
variables x e y.
Lnea 16
Utilice Circle3 conseguir mtodo para acceder a las variables de instancia privada.
Lneas 18-19
Utilice mtodos set heredadas modificar heredadas protegidas datos x e y.
Lnea 20
Utilice mtodo set Circle3 modificar el radio de datos privados.
1 // Fig. 9.11: CircleTest3.java
2 // clase de pruebas Circle3.
Java.text.DecimalFormat 3 de importacin;
Javax.swing.JOptionPane 4 de importacin;

5
6 public class CircleTest3 {
7
8

principales (String [] args) void estticos pblicos

9{
10

// Objeto Circle instantiate

11 Circle3 crculo = new Circle3 (37, 43, 2.5);


12
13

// Obtener coordenadas xy iniciales de Circle3 y radio

14 String salida = "coordenada X es" + circle.getX () +


15

"\ NY coordenada es" + circle.getY () +

16

"\ NRadius es" + circle.getRadius ();

17

18 circle.setX (35); // establecer nuevos coordenada x


19 circle.setY (20); // establece nueva coordenada
20 circle.setRadius (4,25); // establecer nuevo radio
21
22

// Obtener representacin String del nuevo valor crculo

23 salida + = "\ n \ nLa nueva ubicacin y el radio del crculo son \ n" +
24 circle.toString ();
25

Utilice mtodos get heredados acceder heredadas protegidas instancia variables x e y.


Crear objeto Circle3.
Utilice Circle3 conseguir mtodo para acceder a las variables de instancia privada.
Utilice mtodos set heredadas modificar heredadas protegidas datos x e y.
Utilice mtodo set Circle3 modificar el radio de datos privados.

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
28

Circletest3.java
26

// valores de punto flotante formato con 2 dgitos de precisin

27 twoDigits DecimalFormat = nueva DecimalFormat ("0,00");


28
29

// Obtener el dimetro del crculo

30 salida + = "\ nDiameter es" +


31 twoDigits.format (circle.getDiameter ());
32
33

// Obtener la circunferencia del crculo

34 salida + = "\ nCircumference es" +

35 twoDigits.format (circle.getCircumference ());


36
37

// Obtener el rea del crculo

38 salida + = "\ nArea es" + twoDigits.format (circle.getArea ());


39
40 JOptionPane.showMessageDialog (null, salida); // salida de la pantalla
41
42 System.exit (0);
43
44} // fin del mtodo principal
45
46} // fin de la clase CircleTest3

2003 Prentice Hall, Inc. Todos los derechos reservados.

29

9.4 Relacin entre Superclases y subclases (Cont.)


El uso de variables de instancia protegidas
Ventajas

subclases pueden modificar directamente los valores

Ligero incremento en el rendimiento

Evite set / get funcin de llamada sobrecarga

Desventajas
Sin comprobacin de validez
subclase puede asignar valor no vlido
Dependiente de Implementacin

mtodos de subclase que dependen ms probable sobre la


implementacin de la superclase

cambios de implementacin superclase pueden dar lugar a


modificaciones de subclases

Software frgil (frgil)

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
30

Point3.java

Lneas 5-6
Mejor prctica de ingeniera de software: privado sobre protegida cuando sea posible.
1 // Fig. 9.12: Point3.java
2 declaracin de la clase // Punto representa un par de coordenadas xy.
3

4 public class Point3 {


5

private int x; // x parte del par de coordenadas

int y privado; // parte y del par de coordenadas

7
8

// Constructor sin argumentos

Point3 pblico ()

10 {
11

// Llamada implcita al constructor de objetos se produce aqu

12}
13
14

// Constructor

15

Point3 pblico (int xValue, int yValue)

16 {

17

// Llamada implcita al constructor de objetos se produce aqu

18 x = xValue; // sin necesidad de validacin


19 y = yValue; // sin necesidad de validacin
20}
21
22

// Establecer x en par de coordenadas

23

setX public void (int xValue)

24 {
25 x = xValue; // sin necesidad de validacin
26}
27

Mejor prctica de ingeniera de software: privado sobre protegida cuando sea posible.
2003 Prentice Hall, Inc.
Todos los derechos reservados.

Contorno
31

Point3.java

Lnea 49
Invoque mtodos pblicos para acceder a las variables de instancia privada.
28

// Devuelve x del par de coordenadas

29

public int getX ()

30 {
31

return x;

32}
33
34

// Conjunto y en el par de coordenadas

35

pblica setY void (int yValue)

36 {
37 y = yValue; // sin necesidad de validacin
38}
39
40

// Devuelve y del par de coordenadas

41

public int getY ()

42 {
43

volver y;

44}
45
46

// Devuelve representacin String del objeto Point3

47

public String toString ()

48 {

49

retorno "[" + GetX () + "," + getY () + "]";

50}
51
52} // fin de la clase Point3

Invoque mtodos pblicos para acceder a las variables de instancia privada.


2003 Prentice Hall, Inc.
Todos los derechos reservados.

Contorno
32

Circle4.java

Lnea 5
Clase Circle4 hereda de la clase Point3.

Lnea 7
Mantener instancia privada radio variable.

1 // Fig. 9,13: Circle4.java


2 // clase Circle4 hereda de Point3 y accesos Point3 de
3 // x e y privado a travs de mtodos pblicos de Point3.
4
5 public class Circle4 extiende Point3 {
6
7

doble radio privada; // radio de Circle4

8
9

// Constructor sin argumentos

10

Circle4 pblico ()

11 {
12

// Llamada implcita al constructor Point3 ocurre aqu

13}
14
15

// Constructor

16

pblica Circle4 (int xValue, int yValue, doble radiusValue)

17 {
18

super (xValue, yValue); // llamar Point3 constructor explcitamente

19 setRadius (radiusValue);
20}
21
22

// Radio set

23

pblica setRadius void (doble radiusValue)

24 {
25 radio = (radiusValue <0.0 0.0:? RadiusValue);
26}
27

Clase Circle4 hereda de la clase Point3.

Mantener instancia privada radio variable.


2003 Prentice Hall, Inc.
Todos los derechos reservados.

Contorno
33

Circle4.java

Lnea 37, 49 y 55

Invoque el mtodo getRadius en lugar de acceder directamente instancia radio variable.

Lneas 53-56
Redefinir el mtodo toString de la clase Point3.
28

// Radio de regreso

29

doble getRadius pblica ()

30 {
31

volver radio;

32}
33
34

// Calcular y dimetro volver

35

doble getDiameter pblica ()

36 {
37

retorno 2 * getRadius ();

38}
39
40

// Calcular y devolver la circunferencia

41

doble getCircumference pblica ()

42 {
43

volver Matemticas PI * getDiameter (.);

44}
45
46

// Calcular y rea de regresar

47

doble getArea pblica ()

48 {
49
50}

volver Matemticas PI * getRadius () * getRadius (.);

51
52

// Devuelve representacin String del objeto Circle4

53

public String toString ()

54 {
55

retorno "Centro =" + sper .toString (+) "; Radio =" + getRadius ();

56}
57
58} // fin de la clase Circle4

Invoque el mtodo getRadius en lugar de acceder directamente instancia radio variable.

Redefinir el mtodo toString de la clase Point3.


2003 Prentice Hall, Inc.
Todos los derechos reservados.

Contorno
34

Circletest4.java
Lnea 11
Crear objeto Circle4.
Lneas 14 y 15
Utilice mtodos get heredados acceder heredadas variables de instancia privadas xe y.
Lnea 16
Utilice Circle4 conseguir mtodo para acceder a instancia privada radio variable.
Lneas 18-19
Utilice mtodos heredados seta modificar heredadas variables de instancia privadas xe y.
Lnea 20
Utilice mtodo set Circle4 modificar instancia radio variable privada.
1 // Fig. 9,14: CircleTest4.java
2 // clase de pruebas Circle4.
Java.text.DecimalFormat 3 de importacin;

Javax.swing.JOptionPane 4 de importacin;
5
6 public class CircleTest4 {
7
8

principales (String [] args) void estticos pblicos

9{
10

// Objeto Circle instantiate

11 Circle4 crculo = new Circle4 (37, 43, 2.5);


12
13

// Obtener coordenadas xy iniciales de Circle4 y radio

14 String salida = "coordenada X es" + circle.getX () +


15

"\ NY coordenada es" + circle.getY () +

16

"\ NRadius es" + circle.getRadius ();

17
18 circle.setX (35); // establecer nuevos coordenada x
19 circle.setY (20); // establece nueva coordenada
20 circle.setRadius (4,25); // establecer nuevo radio
21
22

// Obtener representacin String del nuevo valor crculo

23 salida + = "\ n \ nLa nueva ubicacin y el radio del crculo son \ n" +
24 circle.toString ();
25

Crear objeto Circle4.


Utilice mtodos get heredados acceder heredadas variables de instancia privadas xe y.
Utilice Circle4 conseguir mtodo para acceder a instancia privada radio variable.
Utilice mtodos heredados seta modificar heredadas variables de instancia privadas xe y.
Utilice mtodo set Circle4 modificar instancia radio variable privada.

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
35

Circletest4.java
26

// valores de punto flotante formato con 2 dgitos de precisin

27 twoDigits DecimalFormat = nueva DecimalFormat ("0,00");


28
29

// Obtener el dimetro del crculo

30 salida + = "\ nDiameter es" +


31 twoDigits.format (circle.getDiameter ());
32
33

// Obtener la circunferencia del crculo

34 salida + = "\ nCircumference es" +


35 twoDigits.format (circle.getCircumference ());
36
37

// Obtener el rea del crculo

38 salida + = "\ nArea es" + twoDigits.format (circle.getArea ());


39
40 JOptionPane.showMessageDialog (null, salida); // salida de la pantalla
41
42 System.exit (0);
43
44} // fin principal
45
46} // fin de la clase CircleTest4

2003 Prentice Hall, Inc. Todos los derechos reservados.

36

9.5 Estudio de caso: Tres Niveles Jerarqua de


herencia
Tres punto de nivel / crculo jerarqua / cilindro
Punto
xy par de coordenadas

Crculo

xy par de coordenadas

Radio

Cilindro

xy par de coordenadas

Radio

Altura

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
37

Cylinder.java

Lnea 4
Cilindro clase extiende la clase Circle4.

Lnea 5
Mantener instancia privada altura variable.
1 // Fig. 9.15: Cylinder.java
2 // clase Cilindro hereda de Circle4.

3
Cilindro 4 clase pblica se extiende Circle4 {
5 doble altura privado; la altura de // Cilindro
6
7 // Constructor sin argumentos
8 Cilindro pblico ()
9{
10

// Llamada implcita al constructor Circle4 ocurre aqu

11}
12
13

// Constructor

14

Cilindro pblico (int xValue, int yValue, doble radiusValue,

15

doble heightValue)

16 {
17

super (xValue, yValue, radiusValue); // llamar Circle4 constructor

18 setHeight (heightValue);
19}
20
21

// Establecer la altura del cilindro

22

pblica setHeight void (doble heightValue)

23 {
24 Altura = (heightValue <0.0 0.0:? HeightValue);
25}
26

Cilindro clase extiende la clase Circle4.


Mantener instancia privada altura variable.

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
38
Cylinder.java

Lnea 34 y 42
Redefinir mtodo getArea de superclase Circle4 volver superficie del cilindro.

Lnea 36
Invoque superclase mtodo getArea de Circle4 usando palabra clave super.

Lneas 46-49
Redefinir el mtodo toString de la clase Circle4.

Lnea 48
Invoque el mtodo toString de superclase Circle4 usando palabra clave super.
27

// Obtener la altura del cilindro

28

doble getHeight pblica ()

29 {
30

altura regresar;

31}
32
33

// Invalidar mtodo Circle4 getArea para calcular el rea del cilindro

34

doble getArea pblica ()

35 {
36
37}

retorno 2 * sper .getArea () + getCircumference () * getHeight ();

38
39

// Calcular el volumen del cilindro

40

doble getVolume pblica ()

41 {
42

retorno sper .getArea () * getHeight ();

43}
44
45

// Devuelve representacin String del objeto Cilindro

46

public String toString ()

47 {
48
49}
50

retorno sper .toString (+) ", Altura =" + getHeight ();

51} // fin de la clase Cilindro

Redefinir mtodo getArea de superclase Circle4 volver superficie del cilindro.


Invoque superclase mtodo getArea de Circle4 usando palabra clave super.
Redefinir el mtodo toString de la clase Circle4.

Invoque el mtodo toString de superclase Circle4 usando palabra clave super.


2003 Prentice Hall, Inc.
Todos los derechos reservados.

Contorno
39
CylinderTest.java
Lneas 14 y 15
Invoque mtodos get Point3 indirectamente heredadas.
Lnea 16
Invoque directamente heredada mtodo get Circle4.

Lnea 16
Invoque mtodo get Cilindro.
Lneas 18-19
Invoque mtodos set Point3 indirectamente heredadas.
Lnea 20
Invoque directamente heredada mtodo set Circle4.
Lnea 21
Cilindro de invocacin establecido mtodo.
Lnea 26
Invoque el mtodo toString anulado.
mtodo.
1 // Fig. 9,16: CylinderTest.java
2 // Prueba Cilindro clase.
Java.text.DecimalFormat 3 de importacin;

Javax.swing.JOptionPane 4 de importacin;
5
6 public class CylinderTest {
7
8

principales (String [] args) void estticos pblicos

9{
10

// Crear objeto Cilindro

11 Cilindro Cilindro Cilindro = new (12, 23, 2.5, 5.7);


12
13

// Obtener coordenadas xy iniciales del cilindro, el radio y la altura

14 String salida = "coordenada X es" + cylinder.getX () +


15

"\ NY coordenada es" + cylinder.getY () + "\ nRadius es" +

16 cylinder.getRadius () + "\ nHeight es" + cylinder.getHeight ();

17
18 cylinder.setX (35); // establecer nuevos coordenada x
19 cylinder.setY (20); // establece nueva coordenada
20 cylinder.setRadius (4,25); // establecer nuevo radio
21 cylinder.setHeight (10,75); // establecer nueva altura
22
23

// Obtener representacin String del nuevo valor del cilindro

24 salida + =
25

"\ N \ nLa nueva ubicacin, el radio y la altura del cilindro son \ n" +

26 cylinder.toString ();
27

Invoque mtodos get Point3 indirectamente heredadas.


Invoque directamente heredada mtodo get Circle4.
Invoque mtodo get Cilindro.

Invoque mtodos set Point3 indirectamente heredadas.


Invoque directamente heredada mtodo set Circle4.
Cilindro de invocacin establecido mtodo.
Invoque el mtodo toString anulado.

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
40

CylinderTest.java

Lnea 40
Invoque el mtodo getArea anulado.
28

// valores de punto flotante formato con 2 dgitos de precisin

29 twoDigits DecimalFormat = nueva DecimalFormat ("0,00");

30
31

// Obtener el dimetro del cilindro

32 salida + = "\ n \ nDiameter es" +


33 twoDigits.format (cylinder.getDiameter ());
34
35

// Obtener la circunferencia del cilindro

36 salida + = "\ nCircumference es" +


37 twoDigits.format (cylinder.getCircumference ());
38
39

// Obtener el rea del cilindro

40 salida + = "\ nArea es" + twoDigits.format (cylinder.getArea ());


41
42

// Obtener el volumen del cilindro

43 salida + = "\ nVolume es" + twoDigits.format (cylinder.getVolume ());


44
45 JOptionPane.showMessageDialog (null, salida); // salida de la pantalla
46
47 System.exit (0);
48
49} // fin principal
50
51} // fin de la clase CylinderTest

Invoque el mtodo getArea anulado.

2003 Prentice Hall, Inc. Todos los derechos reservados.

41

9.6 Constructores y finalizadores en subclases


Instanciar objeto subclase

Cadena de llamadas de constructor


constructor de la subclase invoca constructor de la superclase
Implcita o explcitamente,
Base de jerarqua de herencia

ltima constructor llamado en cadena es constructor Object 's

Cuerpo subclase original constructor 's termina de ejecutar la

ltima

Ejemplo: jerarqua Point3 / Circle4 / cilindro

Point3 constructor llamado penltimo (ltimo es

constructor de Object)
Constructor Point3 's cuerpo termina segundo de ejecucin
(primera es constructor Object' cuerpo s)

2003 Prentice Hall, Inc. Todos los derechos reservados.

42

9.6 Constructores y destructores de las clases


derivadas
Basura objeto subclase coleccionismo
Cadena de llamadas mtodo finalize

Invertir orden de la cadena de constructor

Finalizer de subclase llama primero

Finalizer del prximo jerarqua superclase al lado


Continuar hasta la jerarqua hasta superreached definitiva

Despus superclase final (Objeto) finalizador, objeto


removido de la memoria

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
43

Point.java

Lneas 12, 22 y 28
Mensajes Constructor y salida finalizador para demostrar orden llamada al mtodo.
1 // Fig. 9,17: Point.java
2 declaracin de la clase // Punto representa un par de coordenadas xy.
3
4 Punto public class {
5 private int x; // x parte del par de coordenadas
6 int y privado; // parte y del par de coordenadas
7
8 // Constructor sin argumentos
9 Point pblico ()

10 {
11

// Llamada implcita al constructor de objetos se produce aqu

12 System.out.println ("Punto constructor sin argumentos:" + presente);


13}
14
15

// Constructor

16

Punto pblico (int xValue, int yValue)

17 {
18

// Llamada implcita al constructor de objetos se produce aqu

19 x = xValue; // sin necesidad de validacin


20 y = yValue; // sin necesidad de validacin
21
22 System.out.println ("constructor Point:" + presente);

23}
24
25

// Finalizador

26

protegida finalize void ()

27 {
28 System.out.println ("finalizador Point:" + presente);
29}
30

Mensajes Constructor y salida finalizador para demostrar orden llamada al mtodo.


2003 Prentice Hall, Inc.
Todos los derechos reservados.

Contorno
44

Point.java

31

// Establecer x en par de coordenadas

32

setX public void (int xValue)

33 {
34 x = xValue; // sin necesidad de validacin
35}
36
37

// Devuelve x del par de coordenadas

38

public int getX ()

39 {
40

return x;

41}
42
43

// Conjunto y en el par de coordenadas

44

pblica setY void (int yValue)

45 {
46 y = yValue; // sin necesidad de validacin
47}
48
49

// Devuelve y del par de coordenadas

50

public int getY ()

51 {
52

volver y;

53}
54
55

// Devuelve representacin String del objeto PUNTO4

56

public String toString ()

57 {
58

retorno "[" + GetX () + "," + getY () + "]";

59}
60

61} // fin Point clase

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
45

Circle.java

Lneas 12, 21 y 29
Mensajes Constructor y salida finalizador para demostrar orden llamada al mtodo.

1 // Fig. 9,18: Circle.java


2 declaracin de la clase // Circle5.
3
4 Crculo clase pblica se extiende Point {
5
6

doble radio privada; // el radio del crculo

7
8

// Constructor sin argumentos

Crculo pblica ()

10 {
11

// Llamada implcita al punto constructor ocurre aqu

12 System.out.println ("Crculo constructor sin argumentos:" + presente);


13}

14
15

// Constructor

16

Crculo pblico (int xValue, int yValue, doble radiusValue)

17 {
18

super (xValue, yValue); // llamar Point constructor

19 setRadius (radiusValue);
20
21 System.out.println ("Crculo constructor:" + presente);
22}
23
24

// Finalizador

25

protegida finalize void ()

26 {

27 System.out.println ("Crculo finalizador:" + presente);


28
29

sper .finalize (); // llamar al mtodo finalize superclase

30}
31

Mensajes Constructor y salida finalizador para demostrar orden llamada al mtodo.

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
46

Circle.java
32

// Radio set

33

pblica setRadius void (doble radiusValue)

34 {

35 radio = (radiusValue <0.0 0.0:? RadiusValue);


36}
37
38

// Radio de regreso

39

doble getRadius pblica ()

40 {
41

volver radio;

42}
43
44

// Calcular y dimetro volver

45

doble getDiameter pblica ()

46 {
47

retorno 2 * getRadius ();

48}
49
50

// Calcular y devolver la circunferencia

51

doble getCircumference pblica ()

52 {
53

volver Matemticas PI * getDiameter (.);

54}

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
47

Circle.java
55
56

// Calcular y rea de regresar

57

doble getArea pblica ()

58 {
59

volver Matemticas PI * getRadius () * getRadius (.);

60}
61
62

// Devuelve representacin String del objeto Circle5

63

public String toString ()

64 {
65

retorno "Centro =" + sper .toString (+) "; Radio =" + getRadius ();

66}
67
68} // fin del crculo de la clase

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
48

ConstructorFinalizerTest.java

Lnea 12
Objeto Point entra y sale del alcance inmediato.

Lneas 15 y 18
Instanciar dos objetos Crculo de demostrar orden de subclase y llamadas a mtodos constructor /
Finalizer superclase.
1 // Fig. 9.19: ConstructorFinalizerTest.java
Orden 2 // Pantalla en la que superclase y subclase

3 // constructores y finalizadores se llaman.


4
5 public class ConstructorFinalizerTest {
6
7

static void pblicos principales (String args [])

8{
9 punto Point;
10 circle1 Crculo, circle2;
11
12 puntos = nuevo punto ( 11 , 22 );
13
14 System.out.println ();
15 circle1 = nuevo crculo ( 72 , 29 , 4.5 );

16
17 System.out.println ();
18 circle2 = nuevo crculo ( 5 , 7 , 10.67 );
19
20 puntos = nula ; // marca para la recoleccin de basura
21 circle1 = nula ; // marca para la recoleccin de basura
22 circle2 = nula ; // marca para la recoleccin de basura
23
24 System.out.println ();
25

Objeto Point entra y sale del alcance inmediato.


Instanciar dos objetos Crculo de demostrar orden de subclase y llamadas a mtodos constructor /
Finalizer superclase.

2003 Prentice Hall, Inc.


Todos los derechos reservados.

Contorno
49

ConstructorFinalizerTest.java
26 System.gc (); // llamar al recolector de basura
27
28 } // fin principal
29
30 } // fin de la clase ConstructorFinalizerTest
Constructor Point: [11, 22]

Constructor Point: Centro = [72, 29]; Radio = 0.0


Crculo constructor: Centro = [72, 29]; Radio = 4.5

Constructor Point: Centro = [5, 7]; Radio = 0.0


Crculo constructor: Centro = [5, 7]; Radio = 10,67

Finalizador Point: [11, 22]


Crculo finalizador: Centro = [72, 29]; Radio = 4.5
Finalizador Point: Centro = [72, 29]; Radio = 4.5
Crculo finalizador: Centro = [5, 7]; Radio = 10,67
Finalizador Point: Centro = [5, 7]; Radio = 10,67

Subclase cuerpo Crculo constructor se ejecuta despus de constructor de la superclase de PUNTO4


finaliza la ejecucin.
Finalizer por objeto Circle llamada en orden inverso al de constructores.

2003 Prentice Hall, Inc. Todos los derechos reservados.


50

9.9 Ingeniera del Software con la herencia


Personalizacin del software existente
Heredar de clases existentes

Incluir miembros adicionales

Redefinir miembros superclase

No hay acceso directo a la superclase cdigo fuente 's

Enlace a cdigo objeto

Proveedores de software independientes (ISV)

Desarrollar cdigo propietario en venta / licencia

Disponible en formato de cdigo objeto

Los usuarios obtienen nuevas clases


Sin acceder ISV cdigo fuente patentada

Das könnte Ihnen auch gefallen