HERENCIA en JAVA PDF
HERENCIA en JAVA PDF
HERENCIA en JAVA PDF
La herencia es una propiedad que permite la declaración de nuevas clases a partir de otras ya
existentes. Esto proporciona una de las ventajas principales de la Programación Orientada a
Objetos: la reutilización de código previamente desarrollado ya que permite a una clase más
específica incorporar la estructura y comportamiento de una clase más general.
Cuando una clase B se construye a partir de otra A mediante la herencia, la clase B hereda
todos los atributos, métodos y clases internas de la clase A. Además la clase B puede redefinir
los componentes heredados y añadir atributos, métodos y clases internas específicas.
Para indicar que la clase B (clase descendiente, derivada, hija o subclase) hereda de la clase A
(clase ascendiente, heredada, padre, base o superclase) se emplea la palabra
reservada extends en la cabecera de la declaración de la clase hija. La sintaxis es la siguiente:
En ese esquema se puede apreciar como los todoterrenos son coches, que a su vez son
automóviles y a su vez son vehículos. Con lo que los todoterrenos adquieren las características
heredadas de todas las clases previas.
1
En Java cada clase sólo puede heredar de una superclase. Eso significa que sólo hay una
clase padre. Este tema fue controvertido ya que lenguajes como C++ admiten herencia
múltiple que significa que una clase puede tener varias clases padre de las que heredaría sus
características.
La decisión de no permitir este tipo de herencia se debe a que a la hora de determinar la clase
de un objeto habría problemas ya que un objeto se podría considerar perteneciente a varias
clases al instanciar.
Las interfaces permiten utilizar cuestiones relativas a la herencia múltiple como se verá más
adelante.
Ejemplo 1:
//primer archivo
//segundo archivo
public class Coche extends Vehiculo {
public int ruedas=4;
public int gasolina;
//tercer archivo
public class PruebaCoche {
2
Sobrescribir o anular métodos de la superclase.
Las subclases heredan los métodos de las superclases. Pero es más, también los pueden
sobrecargar para proporcionar una versión de un determinado método adaptado a las
necesidades de la nueva clase.
Por último, si una subclase define un método con el mismo nombre, tipo y argumentos que un
método de la superclase, se dice entonces que se sobrescribe o anula el método de la
superclase.
Ejemplo:
public class Vehiculo{
double velocidad;
public Vehiculo(double v){
velocidad=v;
}
}
public class Coche extends Vehiculo{
double gasolina;
public Coche(double v, double g){ //constructor de coche
super(v); //Llama al constructor de la clase vehiculo
gasolina=g
}
}
3
HERENCIA Y CONSTRUCTORES
super(argumentos opcionales);
constructores
Los constructores no se heredan de la clase padre a las clases hijas. Pero sí se puede
invocar al constructor de la clase padre.
De hecho por defecto aunque haya o no haya constructor se hace una invocación al
constructor por defecto de la clase padre. Ejemplo:
public classA {
protected int valor;
}
}
La clase A simplemente tiene una propiedad (heredable) que se coloca con el valor 2 en el
constructor por defecto.
4
La clase B es hija de A. Ha redefinido el método escribir y además no tiene constructor. Pero
puede utilizar la propiedad valor que procede de la clase A. Así este código:
5
Constructores en las clases A y B
public class A {
protected int valor;
El uso de super y this no puede ser simultáneo puesto que ambas tienen que ser la
primera instrucción. Lo que significa que hay que elegir entre ambas.
Se puede declarar un nuevo atributo con el mismo identificador que uno heredado,
quedando este atributo oculto. Esta técnica no es recomendable.
Se puede declarar un nuevo método de instancia con la misma cabecera que el de la clase
padre, lo que supone su sobreescritura. Por lo tanto, la sobreescritura o redefinición
6
consiste en que métodos adicionales declarados en la clase hija con el mismo nombre, tipo
de dato devuelto y número y tipo de parámetros sustituyen a los heredados.
Se puede declarar un nuevo método de clase con la misma cabecera que el de la clase
padre, lo que hace que éste quede oculto. Por lo tanto, los métodos de clase o estáticos
(declarados como static) no pueden ser redefinidos.
Un método declarado con el modificador final tampoco puede ser redefinido por una clase
hija.
En general puede accederse a los métodos de la clase padre que han sido redefinidos
empleando la palabra reservada super delante del identificador del método. Este
mecanismo sólo permite acceder al método perteneciente a la clase en el nivel
inmediatamente superior de la jerarquía de clases.
/**
// Variable de instancia
// Metodos publicos
return this.euros;
this.euros = x;
7
se construye la clase Producto como hija de la clase Precio de la siguiente forma:
/**
*/
// Variable de instancia
// Metodos publicos
return this.codigo;
this.codigo=x;
this.asignaCodigo(cod);
this.pone(p);
return "Codigo: " + codigo + " ; precio: " + euros + " euros";
8
La clase PruebaClaseProducto trabaja con dos instancias de la clase Producto:
/**
*/
p.asignaProducto(200201, 15.8);
System.out.println(p.toString());
q.asignaCodigo(200202);
q.pone(34.3);
System.out.println(q.toString());
9
Ejercicio 1. Enunciado:
El resto de clases solo deben sobrescribir el método toString() en cada una de ellas
y declarar el constructor adecuado de forma que cuando la ejecución de las
siguientes instrucciones:
10
11