Publicado el 26 de Febrero del 2017
927 visualizaciones desde el 26 de Febrero del 2017
220,0 KB
28 paginas
Creado hace 18a (16/04/2007)
Herencia
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y Computación
Universidad Complutense de Madrid
16 de abril de 2007
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Herencia
Herencia: relación es un
I
Seres materiales
Seres inertes
Seres vivos
Coches
Plantas
Animales
Renault
Flores
Insectos
Peces
Mamíferos
el coche de Flora
el geranio de juan
Perros
Humanos
el caniche de juan
Alumnos
Vendedores
Profesores
Juan
Floristas
Enrollados
Capullos
Flora
Luis
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Herencia
Herencia: relación es un
II
Recorrido de la jerarquía
Según se recorre la jerarquía los elementos que están por debajo
heredan características de los elementos superiores:
Todos los objetos tienen masa y volúmen.
Todos los seres vivos nacen, crecen, etc. . . .
Todos los mamíferos maman cuando son pequeños, etc. . . .
Todos los perros ladran.
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Herencia
Herencia: relación es un
III
Por tanto el perro de juan
tienen masa y volúmen.
nace, crece, etc. . . .
mamó cuando fue pequeño, etc. . . .
ladra.
Características heredadas
Existen características que no cambian (peso y volúmen).
Caracteríticas que se añaden.
Características que se modifican, se refinan o cambian.
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Herencia
Herencia múltiple
padre
director de banco
director de banco que tiene hijos
Pepe
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Herencia
Herencia en Java
Interfaces.
Clases abstractas.
Extensión de clases.
Implementación de interfaces.
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Herencia
Clase Object
public class Patata {
. . . . . . .
. . . . . . .
. . . . . . .
}
Clase Object
1
2
3
4
5
public class Patata e x t e n d s Object {
. . . . . . .
. . . . . . .
. . . . . . .
}
1
2
3
4
5
La clase Object es la superclase de todas las clases en Java.
Dispone, entre otros, de los métodos:
boolean equals(Object obj)
String toString()
Estos métodos se deben sobreescribir en las subclases.
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Herencia
Clase Fecha
public b o o l e a n equals ( Object obj ) {
if (! ( obj i n s t a n c e o f Fecha )) return false ;
return d i a s D e s d e I n i c i o ==(( Fecha ) obj ). d i a s D e s d e I n i c i o ;
}
public String t o S t r i n g (){
F e c h a T e r n a f = new F e c h a T e r n a ( d i a s D e s d e I n i c i o );
return f . t o S t r i n g ();
}
1
2
3
4
1
2
3
4
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Herencia
Extensión de clases
Extensión de clase
p a c k a g e fecha ;
public class F e c h a F u e r a D e R a n g o e x t e n d s R u n t i m e E x c e p t i o n {
public F e c h a F u e r a D e R a n g o ( String s ) {
super ( s );
}
}
Extensión de interfaz
public class Fecha i m p l e m e n t s C o m p a r a b l e {
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
}
1
2
3
4
5
6
1
2
3
4
5
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Herencia
Clases, clases abstracas e interfaces
Clase normal: todalmente definida, puede haber objetos de esa
clase.
Clase abstracta: parcialmente definida, puede tener algún atributo,
métodos totalmente definidos y métodos no
definidos.
Interfaz: sólo define algún método, pero sin implementar.
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Herencia
Clase Abstracta
public a b s t r a c t class Patata {
p r i v a t e int a t r i b u t o ;
public a b s t r a c t m o d i f i c a ( int x );
}
1
2
3
4
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Herencia
Interfaz
El interfaz Comparable del API de Java debe ser de la forma
p a c k a g e java . lang ;
public i n t e r f a c e C o m p a r a b l e {
public int c o m p a r e T o ( Object o );
}
1
2
3
4
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Herencia
Herencia múltiple
public class Patata {
public int x ;
public void i n c r e m e n t a (){
x = x +1;
}
}
1
2
3
4
5
6
public class Tomate {
public int x ;
public void i n c r e m e n t a (){
x = x +10;
}
}
public class L e c h u g a e x t e n d s Patata , Tomate {
public int y ;
}
......
......
L e c h u g a l e c h u g a = new L e c h u g a ();
l e c h u g a . i n c r e m e n t a (); // ¿ i n c r e m e n t a x = x +1 ó x = x +10 ?
1
2
3
4
5
6
1
2
3
4
5
6
7
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Herencia
Herencia múltiple en Java
En Java existe versión restringida de herencia
Se puede extender sólo 1 clase.
Se puende implementar más de 1 interfaz.
public class T r a z a d o r e x t e n d s Frame
i m p l e m e n t s W i n d o w L i s t e n e r , O b j e t o C o m p a r a b l e {
1
2
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Herencia
Objeto super
Invocación a la superclase
public class E s t u d i a n t e {
p r i v a t e String nombre ;
public E s t u d i a n t e ( String nombre ) {
this . nombre = nombre ;
}
public void e s t u d i a ( double tiempo ) { . . . . }
}
public class E s t u d i a n t e P e r e z o s o e x t e n d s E s t u d i a n t e {
public E s t u d i a n t e P e r e z o s o ( String nombre ) {
super ( nombre );
}
public void t r a b a j a ( double tiempo ){
super . e s t u d i a ( tiempo /3);
d e s c a n s a ( tiempo /3);
super . e s t u d i a ( tiempo /3);
}
}
1
2
3
4
5
6
7
1
2
3
4
5
6
7
8
9
10
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Herencia
Objeto this
public class Fecha {
. . . . . . . . . . . . . . . . . . . .
public Fecha ( int dia , int mes , int anyo ) {
c o m p r u e b a F e c h a ( dia , mes , anyo );
d i a s D e s d e I n i c i o = c a l c u l a D i a s D e s d e I n i c i o ( dia , mes , anyo );
}
public Fecha () {
this (1 ,1 ,1998);
}
. . . . . . . . . . . . . . . . . . . .
}
}
class F e c h a T e r n a {
p r i v a t e int dia ;
p r i v a t e int mes ;
p r i v a t e int anyo ;
. . . . . . . . . . . . . . . . . . . . . .
public F e c h a T e r n a ( int dias ) {
this . dia = quedan +1;
this . mes = mes +1;
this . anyo = anyo ;
}
. . . . . . . .
1
2
3
4
5
6
7
8
9
10
11
12
1
2
3
4
5
6
7
8
9
10
11
12
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Herencia
Figuras planas
p a c k a g e g e o m e t r i a . f i g u r a s P l a n a s ;
public i n t e r f a c e F i g u r a P l a n a {
public b o o l e a n i n t e r s e c a C o n ( F i g u r a P l a n a otra );
public double d i s t a n c i a ( Punto p );
}
p a c k a g e g e o m e t r i a . f i g u r a s P l a n a s ;
public a b s t r a c t class S u p e r f i c i e i m p l e m e n t s F i g u r a P l a n a {
public a b s t r a c t b o o l e a n e s t a D e n t r o ( Punto P );
public a b s t r a c t double s u p e r f i c i e ();
}
1
2
3
4
5
1
2
3
4
5
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Herencia
Puntos
public class Punto i m p l e m e n t s F i g u r a P l a n a {
public Punto ( double x , double y ){
posX = x ; posY = y ;
}
public double d i s t a n c i a ( Punto otro ){
Vector v = new Vector ( this , otro );
return v . modulo ();
}
public b o o l e a n equals ( Object o ){
if ( o i n s t a n c e o f Punto ) {
Punto otro = ( Punto ) o ;
return ( this . posX == otro . posX ) && ( this . posY == otro . posY );
}
else return false ;
}
public b o o l e a n i n t e r s e c a C o n ( F i g u r a P l a n a otra ){
if ( otra i n s t a n c e o f Punto ) {
return this . equals ( otra );
}
else {
return otra . i n t e r s e c a C o n ( this );
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Herencia
Método equals
Definido en Object, todos los objetos son subclase suya: todos
tienen definido el método equals.
public b o o l e a n equals ( Object o ){
if ( o i n s t a n c e o f Punto ) {
Punto otro = ( Punto ) o ;
return ( this . posX == otro . posX ) && ( this . posY == otro . posY );
}
else return false ;
}
1
2
3
4
5
6
7
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Herencia
Interfaces Comparable y Cloneable
public class Fecha i m p l e m e n t s Comparable , C l o n e a b l e {
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
public int c o m p a r e T o ( Object o ) {
if (!( o i n s t a n c e o f Fecha ))
return d i a s D e s d e I n i c i o -(( Fecha ) o ). d i a s D e s d e I n i c i o ;
}
public Fecha clone () {
Fecha fecha = new Fecha ();
fecha . d i a s D e s d e I n i c i o = this . d i a s D e s d e I n i c i o ;
return fecha ;
}
. . . . . . . . . . . . . . . . . . . . . . .
}
throw new C l a s s C a s t E x c e p t i o n ( " Se r e q u i e r e un objeto de clase fecha . Fecha . " +
" He r e c i b i d o algo de clase " + o .
Comentarios de: Herencia (0)
No hay comentarios