Herencia & porlimorfismo
1. Herencia
2. Polimorfismo
3. Interfaces
1
1. Herencia
1.1. Introducción
1.2. Los constructores en la herencia
1.3. Modificadores de acceso
1.4. La clase Object
1.5 Herencia vs. composición
2
1.1.- Introducción
• La herencia permite definir clases (subclases) a partir de otra clase
más genérica (superclase).
• La subclase reúne todas lapropiedades de la superclase, además
de las suyas propias.
• La herencia potencia la reutilización de código, genera código
más fiable y robusto y reduce el coste de mantenimiento.
Persona
Persona
nombre
apellidos
dni
mostrarNombre
mostrarDNI
Estudiante
Estudiante
numExpediente
mostrarNumExp
class Estudiante extends Persona { . . .
3
class Persona(){
Stringnombre, apellidos, dni;
void mostrarNombre(){
System.out.println(“Nombre: ” + apellidos + “,” + nombre);
}
void mostrarDNI() {
System.out.println(“DNI: ” + dni);
}
}
class Estudiante extends Persona {
String numExpediente;
void mostrarNumExp(){
System.out.println(“Núm. Exp. ” + numExpediente);
}
}
class Ejemplo {
public static void main(String args[]) {
Estudiante e = new Estudiante();e.nombre = “Ana”;
e.apellidos = “García”;
e.dni = “1234567”;
e.numExpediente = “10001”;
e.mostrarNombre();
e.mostrarNumExp();
}
}
4
1.1.- Introducción
• En Java no se permite la herencia múltiple.
A
A
B
C
Error
B
C
Correcto
• Una subclase hereda todos los métodos y atributos de la superclase
EXCEPTO:
– Atributos y métodos privados
– Constructores (no seheredan pero sí se ejecutan)
5
1.2.- Los constructores en la herencia
•
Conceptos previos: toda clase, por defecto, contiene un constructor sin
parámetros y vacío.
class Esfera(){
double radio;
Esfera() {} // Este constructor existe sin necesidad de escribirlo
}
Esfera e = new Esfera();
•
Correcto
El constructor por defecto se pierde si escribimos cualquier otroconstructor.
class Esfera(){
double radio;
Esfera(double r) {
radio = r;
}
}
Esfera e1 = new Esfera();
Esfera e2 = new Esfera(10);
Incorrecto. No existe constructor sin parámetros
Correcto
6
1.2.- Los constructores en la herencia
• Los constructores no se heredan.
class Esfera(){
double radio;
Esfera(double r) {
radio = r;
}
Esfera() {
radio = 1;
}
}
class Planeta extendsEsfera {
int numSatelites;
Planeta(double r, int ns) {
radio = r; numSatelites = ns;
}
}
Planeta p1
Planeta p2
Planeta p3
Esfera e =
= new Planeta(6378, 1);
= new Planeta(6378);
= new Planeta();
new Esfera(6378);
¿Correcto / Incorrecto?
¿Correcto / Incorrecto?
¿Correcto / Incorrecto?
¿Correcto / Incorrecto?
7
1.2.- Los constructores en la herencia
• Cuando creamos unobjeto de una subclase, el constructor de la
clase padre TAMBIÉN se ejecuta:
class A(){
A() { System.out.println(“En A”); }
}
class B extends A {
B() { System.out.println(“En B”); }
}
class Demo {
public static void main(String args[]) {
B b = new B();
}
}
Salida por pantalla:
En A
En B
• Primero se ejecuta el constructor de la superclase y luego el de la
subclase
8
1.2.-Los constructores en la herencia
• ¿Qué constructor se ejecuta en la superclase? → El constructor sin
parámetros, a no ser que “digamos lo contrario”
class A(){
int i;
A() { i = 0; }
A( int i ){ this.i = i; }
}
class B extends A {
int j;
B() { j = 0; }
B( int j ){ this.j = j; }
}
class Demo {
public static void main(String args[]) {
B b1 = new B(); System.out.println(“i=“ + b1.i +“j=“ + b1.j);
B b2 = new B(5);System.out.println(“i=“ + b2.i + “j=“ + b2.j);
}
}
Salida por pantalla:
i=0 j =0
i=0 j=5
9
1.2.- Los constructores en la herencia
• ¿Cómo podemos forzar la ejecución de un constructor determinado
en la clase padre (superclase)?
class B extends A {
int j;
B() { j = 0; }
B( int j ){
super(j); // Ejecuta un constructor en la superclase que
//...
Regístrate para leer el documento completo.