Escolar Documentos
Profissional Documentos
Cultura Documentos
9.1 Introduccin
Herencia
Reusabilidad del software
Crear nueva clase de clase existente
Puede personalizar
Comportamientos adicionales
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
9.1 Introduccin
Abstraccin
Centrarse en los aspectos comunes entre los objetos en el sistema
Herencia
"Tiene un"
Composicin
Cuadriltero: superclase
Rectngulo: subclase
Ejemplo:
superclase: Vehculo
Coches, camiones, barcos, bicicletas, ...
subclase: Coche
Ms pequeo subconjunto, ms especfico de vehculos
Oregn
subclase
Heredar de datos / comportamientos de otras clases
Profesor
Antiguo alumno
Tetraedro
2003 Prentice Hall, Inc. Todos los derechos reservados.
10
miembros superclase
miembros de subclases
11
Punto
xy par de coordenadas
Crculo
xy par de coordenadas
Radio
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
7
8
Point pblico ()
10 {
11
12}
13
14
// Constructor
15
16 {
17
23
24 {
Contorno
13
Point.java
Lneas 47-50
Invalidar mtodo toString de la clase Object.
28
29
30 {
31
return x;
32}
33
34
35
36 {
37 y = yValue; // sin necesidad de validacin
38}
39
40
41
42 {
43
volver y;
44}
45
46
47
48 {
49
50}
51
52} // fin Point clase
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
8{
9 punto Point = new Point (72, 115); // crea objeto Point
10
11
14
15 point.setX (10); // conjunto coordenada x
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
8
9
10
Crculo pblica ()
11 {
12
13}
14
15
// Constructor
16
17 {
18
25
26 {
27 x = xValue; // sin necesidad de validacin
28}
29
Contorno
16
Circle.java
Lneas 31-47
Cdigo similar al cdigo de Punto Nota.
Lnea 51
Asegurar valor no negativo para el radio.
30
31
32 {
33
return x;
34}
35
36
37
38 {
39 y = yValue; // sin necesidad de validacin
40}
41
42
43
44 {
45
volver y;
46}
47
48
// Radio set
49
50 {
51 radio = (radiusValue <0.0 0.0:? RadiusValue);
52}
53
54
// Radio de regreso
55
56 {
57
volver radio;
58}
59
Contorno
17
Circle.java
60
61
62 {
63
retorno 2 * radio;
64}
65
66
67
68 {
69
70}
71
72
73
74 {
75
76}
77
78
79
80 {
81
82}
83
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
15
16
22 salida + = "\ n \ nLa nueva ubicacin y el radio del crculo son \ n" +
23 circle.toString ();
24
25
Contorno
19
CircleTest.java
Lneas 29-37
Utilice obtener mtodos para obtener del crculo de dimetro, circunferencia y rea.
28
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}
12
13
// Constructor
14
15 {
16
// Radio set
23
24 {
Contorno
21
34
35
36 {
37
retorno 2 * radio;
38}
39
40
41
42 {
43
44}
45
46
47
48 {
49
50}
51
52
53
54 {
55
56
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
Si intenta acceder a variables de instancia privadas x del punto superclase y resultados anuales en los
errores de sintaxis.
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 {
7
8
Point2 pblica ()
10 {
11
12}
13
14
// Constructor
15
16 {
17
23
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
29
30 {
31
return x;
32}
33
34
35
36 {
37 y = yValue; // sin necesidad de validacin
38}
39
40
41
42 {
43
volver y;
44}
45
46
47
48 {
49
50}
51
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
7
8
Circle3 pblico ()
10 {
11
12}
13
14
// Constructor
15
16 {
17
// Radio set
24
25 {
26 radio = (radiusValue <0.0 0.0:? RadiusValue);
27}
28
Contorno
26
Circle3.java
Lnea 56
Acceso heredado de instancia variables x e y, declarada protegida en superclase Point2.
29
// Radio de regreso
30
31 {
32
volver radio;
33}
34
35
36
37 {
38
39}
retorno 2 * radio;
40
41
42
43 {
44
45}
46
47
48
49 {
50
51}
52
53
54
55 {
56
57}
58
59} // fin de la clase Circle3
Contorno
27
Circletest3.java
Lnea 11
5
6 public class CircleTest3 {
7
8
9{
10
16
17
23 salida + = "\ n \ nLa nueva ubicacin y el radio del crculo son \ n" +
24 circle.toString ();
25
Contorno
28
Circletest3.java
26
29
Desventajas
Sin comprobacin de validez
subclase puede asignar valor no vlido
Dependiente de Implementacin
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
7
8
Point3 pblico ()
10 {
11
12}
13
14
// Constructor
15
16 {
17
23
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
29
30 {
31
return x;
32}
33
34
35
36 {
37 y = yValue; // sin necesidad de validacin
38}
39
40
41
42 {
43
volver y;
44}
45
46
47
48 {
49
50}
51
52} // fin de la clase Point3
Contorno
32
Circle4.java
Lnea 5
Clase Circle4 hereda de la clase Point3.
Lnea 7
Mantener instancia privada radio variable.
8
9
10
Circle4 pblico ()
11 {
12
13}
14
15
// Constructor
16
17 {
18
19 setRadius (radiusValue);
20}
21
22
// Radio set
23
24 {
25 radio = (radiusValue <0.0 0.0:? RadiusValue);
26}
27
Contorno
33
Circle4.java
Lnea 37, 49 y 55
Lneas 53-56
Redefinir el mtodo toString de la clase Point3.
28
// Radio de regreso
29
30 {
31
volver radio;
32}
33
34
35
36 {
37
38}
39
40
41
42 {
43
44}
45
46
47
48 {
49
50}
51
52
53
54 {
55
retorno "Centro =" + sper .toString (+) "; Radio =" + getRadius ();
56}
57
58} // fin de la clase Circle4
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
9{
10
16
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
23 salida + = "\ n \ nLa nueva ubicacin y el radio del crculo son \ n" +
24 circle.toString ();
25
Contorno
35
Circletest4.java
26
36
Crculo
xy par de coordenadas
Radio
Cilindro
xy par de coordenadas
Radio
Altura
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
11}
12
13
// Constructor
14
15
doble heightValue)
16 {
17
18 setHeight (heightValue);
19}
20
21
22
23 {
24 Altura = (heightValue <0.0 0.0:? HeightValue);
25}
26
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
28
29 {
30
altura regresar;
31}
32
33
34
35 {
36
37}
38
39
40
41 {
42
43}
44
45
46
47 {
48
49}
50
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
9{
10
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
24 salida + =
25
"\ N \ nLa nueva ubicacin, el radio y la altura del cilindro son \ n" +
26 cylinder.toString ();
27
Contorno
40
CylinderTest.java
Lnea 40
Invoque el mtodo getArea anulado.
28
30
31
41
ltima
constructor de Object)
Constructor Point3 's cuerpo termina segundo de ejecucin
(primera es constructor Object' cuerpo s)
42
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
// Constructor
16
17 {
18
23}
24
25
// Finalizador
26
27 {
28 System.out.println ("finalizador Point:" + presente);
29}
30
Contorno
44
Point.java
31
32
33 {
34 x = xValue; // sin necesidad de validacin
35}
36
37
38
39 {
40
return x;
41}
42
43
44
45 {
46 y = yValue; // sin necesidad de validacin
47}
48
49
50
51 {
52
volver y;
53}
54
55
56
57 {
58
59}
60
Contorno
45
Circle.java
Lneas 12, 21 y 29
Mensajes Constructor y salida finalizador para demostrar orden llamada al mtodo.
7
8
Crculo pblica ()
10 {
11
14
15
// Constructor
16
17 {
18
19 setRadius (radiusValue);
20
21 System.out.println ("Crculo constructor:" + presente);
22}
23
24
// Finalizador
25
26 {
30}
31
Contorno
46
Circle.java
32
// Radio set
33
34 {
// Radio de regreso
39
40 {
41
volver radio;
42}
43
44
45
46 {
47
48}
49
50
51
52 {
53
54}
Contorno
47
Circle.java
55
56
57
58 {
59
60}
61
62
63
64 {
65
retorno "Centro =" + sper .toString (+) "; Radio =" + getRadius ();
66}
67
68} // fin del crculo de la clase
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
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
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]