Clases – Herencia
Conceptos Básicos
El mecanismo de herencia permite definir nuevas clases partiendo de otras ya existentes. Las clases derivadas heredan automáticamente todo su comportamiento es decir: variables y métodos, y además permite introducir características propias que la diferencian.
La declaración de herencia, se lleva a cabo a través de la palabra reservada extends utilizada en la definición de la clase
public class Automovil extends Vehiculo { … }
Utilizando la nomenclatura de orientación a objetos, una clase derivada de otra se denomina subclase, mientras que la clase de la cual procede recibe el nombre de superclase.
Cuando se crea una nueva clase en Java, se puede especificar el nivel de acceso que se quiere para las variables de instancia y los métodos definidos en la clase:
public
Cualquier clase desde cualquier lugar puede acceder a las variables y métodos de instancia públicos.
public void CualquieraPuedeAcceder(){}
protected
Sólo las subclases de la clase y nadie más puede acceder a las variables y métodos de instancia protegidos.
protected void SoloSubClases(){}
private
Las variables y métodos de instancia privados sólo pueden ser accedidos desde dentro de la clase. No son accesibles desde las subclases.
private String NumeroDelCarnetDeIdentidad;
friendly (sin declaración específica)
Por defecto, si no se especifica el control de acceso, las variables y métodos de instancia se declaran friendly (amigas), lo que significa que son accesibles por todos los objetos dentro del mismo paquete, pero no por los externos al paquete.
Es lo mismo que protected
void MetodoDeMiPaquete(){}
Los métodos protegidos (protected) pueden ser vistos por las clases derivadas, como en C++, y también, en Java, por los paquetes (packages). Todas las clases de un paquete pueden ver los métodos protegidos de ese paquete.
Para evitarlo, se deben declarar como private protected, lo que hace que ya funcione como en C++ en donde sólo se puede acceder a las variables y métodos protegidos de las clases derivadas.
Relación entre objetos de una superclase y objetos de subclases
Un objeto de una subclase puede ser tratado como objeto de su superclase correspondiente. Lo contrario no se cumple.
Esto hace posible utilizar un array de objetos de la superclase y almacenaren él objetos de cualquier subclase, tratándolos de una forma común.
Constructores de Subclases
Cuando se crea un objeto de una subclase, es recomendable invocar al constructor de la superclase, para que se encargue de cualquier inicialización de las variables
Para ello, es necesario incluir en el constructor de la subclase una llamada al de la superclase mediante la referencia super.
public class Vehiculo {
private int nRuedas;
Vehiculo (int nR) {
nRuedas = nR;
}
}
public class Automovil extends Vehiculo {
private int cilindrada;
public Automovil (int numRuedas, int cil) {
super (numRuedas);
cilindrada = cil;
}
}