La Herencia es el mecanismo por el que podemos definir una clase a partir de otra que ya exista, de forma que la nueva clase tendrá todas las variables y métodos de la clase a partir de la que se crea, más las variables y métodos nuevos que necesite. A la clase base a partir de la cual se crea la nueva clase se le llama superclase.
Has visto que las clases se definen de la siguiente manera
class MiClase {
//campo, constructor y declaraciones del metodo
}
La herencia se puede aplicar de las siguiente manera
class MiOtraClase extends MiClase { //Se crea una clase MiOtraClase de tipo MiClase
//campo, constructor y declaraciones del metodo
}
O tambien
Miclase MiOtraClase = new Miclase(); // se crea la subclase MiOtraClase de tipo MiClase
Esta es la declaracion de una clase. El cuerpo de la clase (area entre el signo de llaves) contiene todo el codigo que se le da para el ciclo de vida a los objetos creados de la clase: constructores para inicializar nuevos objetos, declaraciones, para los campos que proveen el estado de la clase y sus objetos, y metodos para implementar la conducta de la clase y sus objetos.
La parte más difícil de entender es el polimorfismo, es decir, la técnica que permite pasar un objeto de una clase derivada a funciones que conocen el objeto solamente por su clase base.
Por ejemplo, si se tiene la clase CCoche, se puede crear la subclase sucoche, que es una especialización de CCoche
Primero definimos las clases de la siguiente manera:
La superclase es CCoche
La subclase es SuCoche
El codigo de la superclase quedaria de la siguiente manera:
/*
* CCoche.java
*
* Created on April 22, 2009, 1:44 AM
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package Coche;
/**
*
* @author Marco Antonio Trejo Lemus
*/
public class CCoche {
/** La clase Ccoche tiene 5 campos */
private boolean encendido = false;
String marca;
String modelo;
String color;
int velocidad;
public void ArrancarMotor() {
{
if (encendido == true)
{
System.out.println("El motor ya esta encendido");
}
else
{
encendido=true;
System.out.println("El motor ha sido encendido");
}
}
}
public void CambiarVelocidad(int numvel)
{
if (encendido == false)
{
System.out.println("El motor esta apagado");
}
else
{
if (numvel == 0) {
//velocidad = 1;
System.out.println("El motor ha cambiado a velocidad " + numvel);
}
if (numvel == 1){
//velocidad = 2;
System.out.println("El motor ha cambiado a velocidad " + numvel);
}
if (numvel == 2){
//velocidad = 3;
System.out.println("El motor ha cambiado a velocidad " + numvel);
}
if (numvel == 3){
//velocidad = 4;
System.out.println("El motor ha cambiado a velocidad " + numvel);
}
if (numvel == 4){
//velocidad = 5;
System.out.println("El motor ha cambiado a velocidad " + numvel);
}
}
}
public void ApagarMotor()
{
if (encendido == false)
{
System.out.println("El motoror ya esta apagado");
}
else
{
encendido=false;
System.out.println("El motor ha sido apagado");
}
}
public void Acelerar()
{
if (encendido == false)
{
System.out.println("El motoror esta apagado... encender");
}
else
{
System.out.println("Acelerando...");
velocidad +=1;
}
}
public void Frenar()
{
if (encendido == false)
{
System.out.println("El motor esta apagado");
}
else
{
System.out.println("Frenando el motor...");
velocidad -=1;
}
}
} //fin de la clase
El codigo de la subclase es el siguiente:
/*
* SuCoche.java
*
* Created on April 22, 2009, 1:44 AM
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package Coche;
/**
*
* @author Marco Antonio Trejo Lemus
*/
public class SuCoche {
/** Crea una nueva instancia de SuCoche */
public SuCoche() {
}
public static void main(String[] args)
{
CCoche sucoche = new CCoche(); // se crea la subclase sucoche de tipo CCoche
sucoche.color="Rojo"; // se utilizan los metodos heredados de CCoche
sucoche.marca="Mustang";
sucoche.modelo="2007";
sucoche.velocidad =0;
sucoche.ArrancarMotor();
sucoche.CambiarVelocidad(2);
sucoche.Acelerar();
sucoche.Acelerar();
sucoche.CambiarVelocidad(3);
sucoche.Acelerar();
sucoche.Acelerar();
sucoche.CambiarVelocidad(4);
sucoche.Frenar();
sucoche.Frenar();
sucoche.CambiarVelocidad(3);
sucoche.Frenar();
sucoche.Frenar();
sucoche.CambiarVelocidad(2);
sucoche.Frenar();
sucoche.CambiarVelocidad(1);
sucoche.ApagarMotor();
}
} //fin de la clase
Para este ejemplo definimos como main a la clase SuCoche
el resultado seria el siguiente:
El motor ha sido encendido
El motor ha cambiado a velocidad 2
Acelerando...
Acelerando...
El motor ha cambiado a velocidad 3
Acelerando...
Acelerando...
El motor ha cambiado a velocidad 4
Frenando el motor...
Frenando el motor...
El motor ha cambiado a velocidad 3
Frenando el motor...
Frenando el motor...
El motor ha cambiado a velocidad 2
Frenando el motor...
El motor ha cambiado a velocidad 1
El motor ha sido apagado
En Java no se puede hacer herencia múltiple. Por ejemplo, de la clase aparato con motor y de la clase animal no se puede derivar nada, sería como obtener el objeto toro mecánico a partir de una máquina motorizada (aparato con motor) y un toro (aminal). En realidad, lo que se pretende es copiar los métodos, es decir, pasar la funcionalidad del toro de verdad al toro mecánico, con lo cual no sería necesaria la herencia múltiple sino simplemente la compartición de funcionalidad que se encuentra implementada en Java a través de interfaces.
Siguiente tema... Interfaces
Saludos
martes, 21 de abril de 2009
Suscribirse a:
Comentarios (Atom)