Date post: | 11-Apr-2016 |
Category: |
Documents |
Upload: | giiaan-tu-niniow |
View: | 214 times |
Download: | 0 times |
2003 Prentice Hall, Inc. Todos los derechos reservados.
1
Capítulo 9 - Programación orientada a objetos: Herencia
Contorno
9.1 Introducción
9.2 Superclases y subclases
9.3 Los miembros protegidos
9.4 Relación entre Superclases y subclases
9.5 Estudio de caso: Tres Niveles Jerarquía de herencia
9.6 Constructores y finalizadores en subclases
9.7 Ingeniería del Software con la herencia
2003 Prentice Hall, Inc. Todos los derechos reservados.
2
9.1 Introducción 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 más especializado de objetos Los comportamientos heredados de superclase Puede personalizar Comportamientos adicionales
2003 Prentice Hall, Inc. Todos los derechos reservados.
3
9.1 Introducción Jerarquía de clases Superclase directa Se hereda de forma explícita (un nivel superior jerarquía) Superclase indirecta Jerarquía de dos o más niveles hasta Heredado Herencia individual Hereda de una superclase La herencia múltiple Hereda de varias superclases Java no soporta herencia múltiple
2003 Prentice Hall, Inc. Todos los derechos reservados.
4
9.1 Introducción Abstracción 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 vehículo Propiedades de vehículos / comportamientos también propiedades de automóviles / comportamientos "Tiene un"
Composición Objeto contiene uno o más objetos de otras clases como miembros Ejemplo: Car tiene un volante
2003 Prentice Hall, Inc. Todos los derechos reservados.
5
9.2 Superclases y subclases Superclases y subclases Objeto de una clase "es un" objeto de otra clase Ejemplo: rectángulo es un cuadrilátero. Clase Rectangle hereda de la clase Cuadrilátero Cuadrilátero: superclase Rectángulo: subclase Superclase representa típicamente mayor conjunto de objetos que subclases
Ejemplo: superclase: Vehículo Coches, camiones, barcos, bicicletas, ... subclase: Coche Más pequeño subconjunto, más específico de vehículos
2003 Prentice Hall, Inc. Todos los derechos reservados.
6
9.2 Superclases y subclases (Cont.) Ejemplos de herencia
2003 Prentice Hall, Inc. Todos los derechos reservados.
7
9.2 Superclases y subclases (Cont.) Jerarquía de herencia Relaciones de herencia: árbol-como la estructura de jerarquía
Cada clase se convierte en superclase Datos de la fuente / comportamientos a otras clasesOregón subclase Heredar de datos / comportamientos de otras clases
2003 Prentice Hall, Inc. Todos los derechos reservados.
8
Fig. 9.2 jerarquía de herencias de CommunityMembers universitarios.CommunityMember
Empleado
Estudiante
Personal
Facultad
Administrador
Profesor
Antiguo alumno
2003 Prentice Hall, Inc. Todos los derechos reservados.
9
Fig. 9.3 jerarquía de herencias de Formas.Forma
TwoDimensionalShape
ThreeDimensionalShape
Círculo
Cuadrado
Triángulo
Esfera
Cubo
Tetraedro
2003 Prentice Hall, Inc. Todos los derechos reservados.
10
9.3 Los miembros protegidos acceso protegido Nivel intermedio de protección entre lo público y lo privado miembros protegidos accesibles a miembros superclase miembros de subclases Miembros de la clase en el mismo paquete Acceso Subclase miembro superclase Súper palabras clave y un punto (.)
2003 Prentice Hall, Inc. Todos los derechos reservados.
11
9.4 Relación entre Superclases y subclases Superclase y subclase relación
Ejemplo: jerarquía de herencia / círculo del punto Punto xy par de coordenadas Círculo xy par de coordenadas Radio 2003 Prentice Hall, Inc.
Todos los derechos reservados.
Contorno12
Point.java
Líneas 5-6
Mantener xey coordenadas como variables de instancia privada.
Línea 11
Llamada implícita a Object constructor
1 // Fig. 9.4: Point.java
2 declaración 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 público ()
10 {
11 // Llamada implícita al constructor de objetos se produce aquí
12}
13
14 // Constructor
15 Punto público (int xValue, int yValue)
16 {
17 // Llamada implícita al constructor de objetos se produce aquí
18 x = xValue; // sin necesidad de validación
19 y = yValue; // sin necesidad de validación
20}
21
22 // Establecer x en par de coordenadas
23 setX public void (int xValue)
24 {
25 x = xValue; // sin necesidad de validación
26}
27
Mantener xey coordenadas como variables de instancia privada.
Llamada implícita a Object constructor
2003 Prentice Hall, Inc.
Todos los derechos reservados.
Contorno13
Point.java
Líneas 47-50
Invalidar método 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 pública setY void (int yValue)
36 {
37 y = yValue; // sin necesidad de validación
38}
39
40 // Devuelve y del par de coordenadas
41 public int getY ()
42 {
43 volver y;
44}
45
46 // Devuelve representación String del objeto Point
47 public String toString ()
48 {
49 retorno "[" + X + "," + y + "]";
50}
51
52} // fin Point clase
Método de anulación toString de la clase Object
2003 Prentice Hall, Inc.
Todos los derechos reservados.
Contorno14
PointTest.java
Línea 9
Instanciar objeto Point
Líneas 15-16
Cambie el valor de X e Y las coordenadas del punto
Línea 19
Implícitamente llamar al método toString de punto
1 // Fig. 9.5: PointTest.java
2 // Prueba Point clase.
Javax.swing.JOptionPane 3 de importación;
4
5 public class PointTest {
6
7 principales (String [] args) void estáticos públicos
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 representación String del nuevo valor del punto
19 salida + = "\ n \ nLa nueva ubicación 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
Implícitamente llamar al método toString de punto
2003 Prentice Hall, Inc.
Todos los derechos reservados.
Contorno15
Circle.java
Líneas 5-7
Mantener coordenadas x e y y el radio como variables de instancia privada.
Líneas 25-28
Código similar al código de Punto Nota.
1 // Fig. 9.6: Circle.java
2 // clase Circle contiene xy par de coordenadas y el radio.
3
4 Círculo public class {
5 private int x; // coordenada x del centro del círculo
6 int y privado; // coordenada y del centro del círculo
7 doble radio privada; // el radio del círculo
8
9 // Constructor sin argumentos
10 Círculo pública ()
11 {
12 // Llamada implícita al constructor de objetos se produce aquí
13}
14
15 // Constructor
16 Círculo público (int xValue, int yValue, doble radiusValue)
17 {
18 // Llamada implícita al constructor de objetos se produce aquí
19 x = xValue; // sin necesidad de validación
20 y = yValue; // sin necesidad de validación
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 validación
28}
29
Mantener coordenadas xy y radio como variables de instancia privada.
Código similar al código de Punto Nota.
2003 Prentice Hall, Inc.
Todos los derechos reservados.
Contorno16
Circle.java
Líneas 31-47
Código similar al código de Punto Nota.
Línea 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 pública setY void (int yValue)
38 {
39 y = yValue; // sin necesidad de validación
40}
41
42 // Devuelve y del par de coordenadas
43 public int getY ()
44 {
45 volver y;
46}
47
48 // Radio set
49 pública setRadius void (doble radiusValue)
50 {
51 radio = (radiusValue <0.0 0.0:? RadiusValue);
52}
53
54 // Radio de regreso
55 doble getRadius pública ()
56 {
57 volver radio;
58}
59
Código similar al código de Punto Nota.
Asegurar valor no negativo para el radio.
2003 Prentice Hall, Inc.
Todos los derechos reservados.
Contorno17
Circle.java
60 // Calcular y diámetro volver
61 doble getDiameter pública ()
62 {
63 retorno 2 * radio;
64}
65
66 // Calcular y devolver la circunferencia
67 doble getCircumference pública ()
68 {
69 volver Matemáticas PI * getDiameter (.);
70}
71
72 // Calcular y área de regresar
73 doble getArea pública ()
74 {
75 volver Matemáticas PI * radio * radio.;
76}
77
78 // Devuelve representación String del objeto Circle
79 public String toString ()
80 {
81 retorno "Centro = [" + x + "," + y + "]; Radio =" + radio;
82}
83
84} // fin del círculo de la clase
2003 Prentice Hall, Inc.
Todos los derechos reservados.
Contorno
18
CircleTest.java
Línea 10
Crear objeto Circle
Líneas 17-19
Utilice métodos set para modificar variable de instancia privada
Línea 23
Explícitamente llamar al método toString del círculo
1 // Fig. 9.7: CircleTest.java
2 // Prueba Círculo clase.
Java.text.DecimalFormat 3 de importación;
Javax.swing.JOptionPane 4 de importación;
5
6 public class CircleTest {
7
8 principales (String [] args) void estáticos públicos
9 {
10 Círculo círculo = new Circle (37, 43, 2.5); // crea objeto Circle
11
12 // Obtener coordenadas xy iniciales de círculo 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 representación String del nuevo valor círculo
22 salida + = "\ n \ nLa nueva ubicación y el radio del círculo son \ n" +
23 circle.toString ();
24
25 // valores de punto flotante formato con 2 dígitos de precisión
26 twoDigits DecimalFormat = nueva DecimalFormat ("0,00");
27
Crear objeto Circle.
Utilice métodos set para modificar variable de instancia privada.
Explícitamente llamar al método toString del círculo
2003 Prentice Hall, Inc.
Todos los derechos reservados.
Contorno19
CircleTest.java
Líneas 29-37
Utilice obtener métodos para obtener del círculo de diámetro, circunferencia y área.
28 // Obtener el diámetro del círculo
29 salida + = "\ nDiameter es" +
30 twoDigits.format (circle.getDiameter ());
31
32 // Obtener la circunferencia del círculo
33 salida + = "\ nCircumference es" +
34 twoDigits.format (circle.getCircumference ());
35
36 // Obtener el área del círculo
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 métodos para obtener del círculo de diámetro, circunferencia y área.
2003 Prentice Hall, Inc.
Todos los derechos reservados.
Contorno20
Circle2.java
Línea 4
Clase circle2 extiende Point clase.
Línea 5
Mantener instancia privada radio variable.
Líneas 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 pública ()
9 {
10 // Llamada implícita al punto constructor ocurre aquí
11}
12
13 // Constructor
14 pública circle2 (int xValue, int yValue, doble radiusValue)
15 {
16 // Llamada implícita 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 pública 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.
Contorno21
34 // Calcular y diámetro volver
35 doble getDiameter pública ()
36 {
37 retorno 2 * radio;
38}
39
40 // Calcular y devolver la circunferencia
41 doble getCircumference pública ()
42 {
43 volver Matemáticas PI * getDiameter (.);
44}
45
46 // Calcular y área de regresar
47 doble getArea pública ()
48 {
49 volver Matemáticas PI * radio * radio.;
50}
51
52 // Devuelve representación 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
Línea 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.
Contorno22
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.
Contorno23
Point2.java
Líneas 5-6
Mantener xey coordenadas como variables de instancia protegidas, accesibles a las subclases.
1 // Fig. 9.9: Point2.java
2 declaración de la clase // Point2 representa un par de coordenadas xy.
3
4 public class Point2 {
5 protegido int x; // x parte del par de coordenadas
6 int y protegida; // parte y del par de coordenadas
7
8 // Constructor sin argumentos
9 Point2 pública ()
10 {
11 // Llamada implícita al constructor de objetos se produce aquí
12}
13
14 // Constructor
15 Point2 público (int xValue, int yValue)
16 {
17 // Llamada implícita al constructor de objetos se produce aquí
18 x = xValue; // sin necesidad de validación
19 y = yValue; // sin necesidad de validación
20}
21
22 // Establecer x en par de coordenadas
23 setX public void (int xValue)
24 {
25 x = xValue; // sin necesidad de validación
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 pública setY void (int yValue)
36 {
37 y = yValue; // sin necesidad de validación
38}
39
40 // Devuelve y del par de coordenadas
41 public int getY ()
42 {
43 volver y;
44}
45
46 // Devuelve representación String del objeto Point2
47 public String toString ()
48 {
49 retorno "[" + X + "," + y + "]";
50}
51
52} // fin de la clase Point2
2003 Prentice Hall, Inc.
Todos los derechos reservados.
Contorno25
Circle3.java
Línea 5
Clase Circle3 hereda de la clase Point2.
Línea 6
Mantener las variables de instancia privada radio.
Líneas 11 y 17
Implícitamente llamar constructor por defecto de la superclase.
Líneas 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
9 Circle3 público ()
10 {
11 // Llamada implícita al constructor Point2 ocurre aquí
12}
13
14 // Constructor
15 pública Circle3 (int xValue, int yValue, doble radiusValue)
16 {
17 // Llamada implícita al constructor Point2 ocurre aquí
18 x = xValue; // sin necesidad de validación
19 y = yValue; // sin necesidad de validación
20 setRadius (radiusValue);
21}
22
23 // Radio set
24 pública 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 Implícitamente 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.
Contorno26
Circle3.java
Línea 56
Acceso heredado de instancia variables x e y, declarada protegida en superclase Point2.
29 // Radio de regreso
30 público doble getRadius ()
31 {
32 volver radio;
33}
34
35 // Calcular y diámetro volver
36 doble getDiameter pública ()
37 {
38 retorno 2 * radio;
39}
40
41 // Calcular y devolver la circunferencia
42 doble getCircumference pública ()
43 {
44 volver Matemáticas PI * getDiameter (.);
45}
46
47 // Calcular y área de regresar
48 doble getArea pública ()
49 {
50 volver Matemáticas PI * radio * radio.;
51}
52
53 // Devuelve representación 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.
Contorno27
Circletest3.java
Línea 11
Crear objeto Circle3.
Líneas 14-15
Utilice métodos get heredados acceder heredadas protegidas instancia variables x e y.
variables x e y.
Línea 16
Utilice Circle3 conseguir método para acceder a las variables de instancia privada.
Líneas 18-19
Utilice métodos set heredadas modificar heredadas protegidas datos x e y.
Línea 20
Utilice método set Circle3 modificar el radio de datos privados.
1 // Fig. 9.11: CircleTest3.java
2 // clase de pruebas Circle3.
Java.text.DecimalFormat 3 de importación;
Javax.swing.JOptionPane 4 de importación;
5
6 public class CircleTest3 {
7
8 principales (String [] args) void estáticos públicos
9 {
10 // Objeto Circle instantiate
11 Circle3 círculo = 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 representación String del nuevo valor círculo
23 salida + = "\ n \ nLa nueva ubicación y el radio del círculo son \ n" +
24 circle.toString ();
25
Utilice métodos get heredados acceder heredadas protegidas instancia variables x e y.
Crear objeto Circle3.
Utilice Circle3 conseguir método para acceder a las variables de instancia privada.
Utilice métodos set heredadas modificar heredadas protegidas datos x e y.
Utilice método set Circle3 modificar el radio de datos privados.
2003 Prentice Hall, Inc.
Todos los derechos reservados.
Contorno28
Circletest3.java
26 // valores de punto flotante formato con 2 dígitos de precisión
27 twoDigits DecimalFormat = nueva DecimalFormat ("0,00");
28
29 // Obtener el diámetro del círculo
30 salida + = "\ nDiameter es" +
31 twoDigits.format (circle.getDiameter ());
32
33 // Obtener la circunferencia del círculo
34 salida + = "\ nCircumference es" +
35 twoDigits.format (circle.getCircumference ());
36
37 // Obtener el área del círculo
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 método principal
45
46} // fin de la clase CircleTest3
2003 Prentice Hall, Inc. Todos los derechos reservados.
29
9.4 Relación 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 función de llamada sobrecarga Desventajas Sin comprobación de validez subclase puede asignar valor no válido Dependiente de Implementación métodos de subclase que dependen más probable sobre la implementación de la superclase
cambios de implementación superclase pueden dar lugar a modificaciones de subclases Software frágil (frágil) 2003 Prentice Hall, Inc.
Todos los derechos reservados.
Contorno30
Point3.java
Líneas 5-6
Mejor práctica de ingeniería de software: privado sobre protegida cuando sea posible.
1 // Fig. 9.12: Point3.java
2 declaración 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
6 int y privado; // parte y del par de coordenadas
7
8 // Constructor sin argumentos
9 Point3 público ()
10 {
11 // Llamada implícita al constructor de objetos se produce aquí
12}
13
14 // Constructor
15 Point3 público (int xValue, int yValue)
16 {
17 // Llamada implícita al constructor de objetos se produce aquí
18 x = xValue; // sin necesidad de validación
19 y = yValue; // sin necesidad de validación
20}
21
22 // Establecer x en par de coordenadas
23 setX public void (int xValue)
24 {
25 x = xValue; // sin necesidad de validación
26}
27
Mejor práctica de ingeniería de software: privado sobre protegida cuando sea posible.
2003 Prentice Hall, Inc.
Todos los derechos reservados.
Contorno31
Point3.java
Línea 49
Invoque métodos públicos 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 pública setY void (int yValue)
36 {
37 y = yValue; // sin necesidad de validación
38}
39
40 // Devuelve y del par de coordenadas
41 public int getY ()
42 {
43 volver y;
44}
45
46 // Devuelve representación String del objeto Point3
47 public String toString ()
48 {
49 retorno "[" + GetX () + "," + getY () + "]";
50}
51
52} // fin de la clase Point3
Invoque métodos públicos para acceder a las variables de instancia privada.
2003 Prentice Hall, Inc.
Todos los derechos reservados.
Contorno32
Circle4.java
Línea 5
Clase Circle4 hereda de la clase Point3.
Línea 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 través de métodos públicos de Point3.
4
5 public class Circle4 extiende Point3 {
6
7 doble radio privada; // radio de Circle4
8
9 // Constructor sin argumentos
10 Circle4 público ()
11 {
12 // Llamada implícita al constructor Point3 ocurre aquí
13}
14
15 // Constructor
16 pública Circle4 (int xValue, int yValue, doble radiusValue)
17 {
18 super (xValue, yValue); // llamar Point3 constructor explícitamente
19 setRadius (radiusValue);
20}
21
22 // Radio set
23 pública 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.
Contorno33
Circle4.java
Línea 37, 49 y 55
Invoque el método getRadius en lugar de acceder directamente instancia radio variable.
Líneas 53-56
Redefinir el método toString de la clase Point3.
28 // Radio de regreso
29 doble getRadius pública ()
30 {
31 volver radio;
32}
33
34 // Calcular y diámetro volver
35 doble getDiameter pública ()
36 {
37 retorno 2 * getRadius ();
38}
39
40 // Calcular y devolver la circunferencia
41 doble getCircumference pública ()
42 {
43 volver Matemáticas PI * getDiameter (.);
44}
45
46 // Calcular y área de regresar
47 doble getArea pública ()
48 {
49 volver Matemáticas PI * getRadius () * getRadius (.);
50}
51
52 // Devuelve representación String del objeto Circle4
53 public String toString ()
54 {
55 retorno "Centro =" + súper .toString (+) "; Radio =" + getRadius ();
56}
57
58} // fin de la clase Circle4
Invoque el método getRadius en lugar de acceder directamente instancia radio variable.
Redefinir el método toString de la clase Point3.
2003 Prentice Hall, Inc.
Todos los derechos reservados.
Contorno34
Circletest4.java
Línea 11
Crear objeto Circle4.
Líneas 14 y 15
Utilice métodos get heredados acceder heredadas variables de instancia privadas xe y.
Línea 16
Utilice Circle4 conseguir método para acceder a instancia privada radio variable.
Líneas 18-19
Utilice métodos heredados seta modificar heredadas variables de instancia privadas xe y.
Línea 20
Utilice método set Circle4 modificar instancia radio variable privada.
1 // Fig. 9,14: CircleTest4.java
2 // clase de pruebas Circle4.
Java.text.DecimalFormat 3 de importación;
Javax.swing.JOptionPane 4 de importación;
5
6 public class CircleTest4 {
7
8 principales (String [] args) void estáticos públicos
9 {
10 // Objeto Circle instantiate
11 Circle4 círculo = 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 representación String del nuevo valor círculo
23 salida + = "\ n \ nLa nueva ubicación y el radio del círculo son \ n" +
24 circle.toString ();
25
Crear objeto Circle4.
Utilice métodos get heredados acceder heredadas variables de instancia privadas xe y.
Utilice Circle4 conseguir método para acceder a instancia privada radio variable.
Utilice métodos heredados seta modificar heredadas variables de instancia privadas xe y.
Utilice método set Circle4 modificar instancia radio variable privada.
2003 Prentice Hall, Inc.
Todos los derechos reservados.
Contorno35
Circletest4.java
26 // valores de punto flotante formato con 2 dígitos de precisión
27 twoDigits DecimalFormat = nueva DecimalFormat ("0,00");
28
29 // Obtener el diámetro del círculo
30 salida + = "\ nDiameter es" +
31 twoDigits.format (circle.getDiameter ());
32
33 // Obtener la circunferencia del círculo
34 salida + = "\ nCircumference es" +
35 twoDigits.format (circle.getCircumference ());
36
37 // Obtener el área del círculo
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 Jerarquía de herencia
Tres punto de nivel / círculo jerarquía / cilindro Punto xy par de coordenadas Círculo xy par de coordenadas Radio Cilindro xy par de coordenadas Radio
Altura 2003 Prentice Hall, Inc.
Todos los derechos reservados.
Contorno37
Cylinder.java
Línea 4
Cilindro clase extiende la clase Circle4.
Línea 5
Mantener instancia privada altura variable.
1 // Fig. 9.15: Cylinder.java
2 // clase Cilindro hereda de Circle4.
3
Cilindro 4 clase pública se extiende Circle4 {
5 doble altura privado; la altura de // Cilindro
6
7 // Constructor sin argumentos
8 Cilindro público ()
9 {
10 // Llamada implícita al constructor Circle4 ocurre aquí
11}
12
13 // Constructor
14 Cilindro público (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 pública 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.
Contorno38
Cylinder.java
Línea 34 y 42
Redefinir método getArea de superclase Circle4 volver superficie del cilindro.
Línea 36
Invoque superclase método getArea de Circle4 usando palabra clave super.
Líneas 46-49
Redefinir el método toString de la clase Circle4.
Línea 48
Invoque el método toString de superclase Circle4 usando palabra clave super.
27 // Obtener la altura del cilindro
28 doble getHeight pública ()
29 {
30 altura regresar;
31}
32
33 // Invalidar método Circle4 getArea para calcular el área del cilindro
34 doble getArea pública ()
35 {
36 retorno 2 * súper .getArea () + getCircumference () * getHeight ();
37}
38
39 // Calcular el volumen del cilindro
40 doble getVolume pública ()
41 {
42 retorno súper .getArea () * getHeight ();
43}
44
45 // Devuelve representación String del objeto Cilindro
46 public String toString ()
47 {
48 retorno súper .toString (+) ", Altura =" + getHeight ();
49}
50
51} // fin de la clase Cilindro
Redefinir método getArea de superclase Circle4 volver superficie del cilindro.
Invoque superclase método getArea de Circle4 usando palabra clave super.
Redefinir el método toString de la clase Circle4.
Invoque el método toString de superclase Circle4 usando palabra clave super.
2003 Prentice Hall, Inc.
Todos los derechos reservados.
Contorno39
CylinderTest.java
Líneas 14 y 15
Invoque métodos get Point3 indirectamente heredadas.
Línea 16
Invoque directamente heredada método get Circle4.
Línea 16
Invoque método get Cilindro.
Líneas 18-19
Invoque métodos set Point3 indirectamente heredadas.
Línea 20
Invoque directamente heredada método set Circle4.
Línea 21
Cilindro de invocación establecido método.
Línea 26
Invoque el método toString anulado.
método.
1 // Fig. 9,16: CylinderTest.java
2 // Prueba Cilindro clase.
Java.text.DecimalFormat 3 de importación;
Javax.swing.JOptionPane 4 de importación;
5
6 public class CylinderTest {
7
8 principales (String [] args) void estáticos públicos
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 representación String del nuevo valor del cilindro
24 salida + =
25 "\ N \ nLa nueva ubicación, el radio y la altura del cilindro son \ n" +
26 cylinder.toString ();
27
Invoque métodos get Point3 indirectamente heredadas.
Invoque directamente heredada método get Circle4.
Invoque método get Cilindro.
Invoque métodos set Point3 indirectamente heredadas.
Invoque directamente heredada método set Circle4.
Cilindro de invocación establecido método.
Invoque el método toString anulado.
2003 Prentice Hall, Inc.
Todos los derechos reservados.
Contorno40
CylinderTest.java
Línea 40
Invoque el método getArea anulado.
28 // valores de punto flotante formato con 2 dígitos de precisión
29 twoDigits DecimalFormat = nueva DecimalFormat ("0,00");
30
31 // Obtener el diámetro 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 método 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 Implícita o explícitamente, Base de jerarquía de herencia Última constructor llamado en cadena es constructor Object 's Cuerpo subclase original constructor 's termina de ejecutar la última Ejemplo: jerarquía Point3 / Circle4 / cilindro Point3 constructor llamado penúltimo (último es constructor de Object) Constructor Point3 's cuerpo termina segundo de ejecución (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 método finalize Invertir orden de la cadena de constructor Finalizer de subclase llama primero Finalizer del próximo jerarquía superclase al lado Continuar hasta la jerarquía hasta superreached definitiva Después superclase final (Objeto) finalizador, objeto removido de la memoria 2003 Prentice Hall, Inc.
Todos los derechos reservados.
Contorno43
Point.java
Líneas 12, 22 y 28
Mensajes Constructor y salida finalizador para demostrar orden llamada al método.
1 // Fig. 9,17: Point.java
2 declaración 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 público ()
10 {
11 // Llamada implícita al constructor de objetos se produce aquí
12 System.out.println ("Punto constructor sin argumentos:" + presente);
13}
14
15 // Constructor
16 Punto público (int xValue, int yValue)
17 {
18 // Llamada implícita al constructor de objetos se produce aquí
19 x = xValue; // sin necesidad de validación
20 y = yValue; // sin necesidad de validación
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 método.
2003 Prentice Hall, Inc.
Todos los derechos reservados.
Contorno44
Point.java
31 // Establecer x en par de coordenadas
32 setX public void (int xValue)
33 {
34 x = xValue; // sin necesidad de validación
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 pública setY void (int yValue)
45 {
46 y = yValue; // sin necesidad de validación
47}
48
49 // Devuelve y del par de coordenadas
50 public int getY ()
51 {
52 volver y;
53}
54
55 // Devuelve representación 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.
Contorno45
Circle.java
Líneas 12, 21 y 29
Mensajes Constructor y salida finalizador para demostrar orden llamada al método.
1 // Fig. 9,18: Circle.java
2 declaración de la clase // Circle5.
3
4 Círculo clase pública se extiende Point {
5
6 doble radio privada; // el radio del círculo
7
8 // Constructor sin argumentos
9 Círculo pública ()
10 {
11 // Llamada implícita al punto constructor ocurre aquí
12 System.out.println ("Círculo constructor sin argumentos:" + presente);
13}
14
15 // Constructor
16 Círculo público (int xValue, int yValue, doble radiusValue)
17 {
18 super (xValue, yValue); // llamar Point constructor
19 setRadius (radiusValue);
20
21 System.out.println ("Círculo constructor:" + presente);
22}
23
24 // Finalizador
25 protegida finalize void ()
26 {
27 System.out.println ("Círculo finalizador:" + presente);
28
29 súper .finalize (); // llamar al método finalize superclase
30}
31
Mensajes Constructor y salida finalizador para demostrar orden llamada al método.
2003 Prentice Hall, Inc.
Todos los derechos reservados.
Contorno46
Circle.java
32 // Radio set
33 pública setRadius void (doble radiusValue)
34 {
35 radio = (radiusValue <0.0 0.0:? RadiusValue);
36}
37
38 // Radio de regreso
39 doble getRadius pública ()
40 {
41 volver radio;
42}
43
44 // Calcular y diámetro volver
45 doble getDiameter pública ()
46 {
47 retorno 2 * getRadius ();
48}
49
50 // Calcular y devolver la circunferencia
51 doble getCircumference pública ()
52 {
53 volver Matemáticas PI * getDiameter (.);
54}
2003 Prentice Hall, Inc.
Todos los derechos reservados.
Contorno47
Circle.java
55
56 // Calcular y área de regresar
57 doble getArea pública ()
58 {
59 volver Matemáticas PI * getRadius () * getRadius (.);
60}
61
62 // Devuelve representación String del objeto Circle5
63 public String toString ()
64 {
65 retorno "Centro =" + súper .toString (+) "; Radio =" + getRadius ();
66}
67
68} // fin del círculo de la clase
2003 Prentice Hall, Inc.
Todos los derechos reservados.
Contorno48
ConstructorFinalizerTest.java
Línea 12
Objeto Point entra y sale del alcance inmediato.
Líneas 15 y 18
Instanciar dos objetos Círculo de demostrar orden de subclase y llamadas a métodos 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 públicos principales (String args [])
8 {
9 punto Point;
10 circle1 Círculo, circle2;
11
12 puntos = nuevo punto ( 11 , 22 );
13
14 System.out.println ();
15 circle1 = nuevo círculo ( 72 , 29 , 4.5 );
16
17 System.out.println ();
18 circle2 = nuevo círculo ( 5 , 7 , 10.67 );
19
20 puntos = nula ; // marca para la recolección de basura
21 circle1 = nula ; // marca para la recolección de basura
22 circle2 = nula ; // marca para la recolección de basura
23
24 System.out.println ();
25
Objeto Point entra y sale del alcance inmediato.
Instanciar dos objetos Círculo de demostrar orden de subclase y llamadas a métodos constructor /
Finalizer superclase.
2003 Prentice Hall, Inc.
Todos los derechos reservados.
Contorno49
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
Círculo constructor: Centro = [72, 29]; Radio = 4.5
Constructor Point: Centro = [5, 7]; Radio = 0.0
Círculo constructor: Centro = [5, 7]; Radio = 10,67
Finalizador Point: [11, 22]
Círculo finalizador: Centro = [72, 29]; Radio = 4.5
Finalizador Point: Centro = [72, 29]; Radio = 4.5
Círculo finalizador: Centro = [5, 7]; Radio = 10,67
Finalizador Point: Centro = [5, 7]; Radio = 10,67
Subclase cuerpo Círculo constructor se ejecuta después de constructor de la superclase de PUNTO4
finaliza la ejecución.
Finalizer por objeto Circle llamada en orden inverso al de constructores.
2003 Prentice Hall, Inc. Todos los derechos reservados.
50
9.9 Ingeniería del Software con la herencia Personalización del software existente Heredar de clases existentes Incluir miembros adicionales Redefinir miembros superclase No hay acceso directo a la superclase código fuente 's Enlace a código objeto Proveedores de software independientes (ISV) Desarrollar código propietario en venta / licencia Disponible en formato de código objeto Los usuarios obtienen nuevas clases Sin acceder ISV código fuente patentada