sábado, 5 de marzo de 2016

Herencia en Java



La herencia es la capacidad que tienen los lenguajes orientados a objetos para extender clases. Esto produce una nueva clase que hereda el comportamiento y los atributos de la clase que ha sido extendida. La clase original se denomina clase base o superclase, la nueva clase se denomina clase derivada o subclase.


Extensión de clases

La capacidad para extender clases se llama herencia porque la nueva clase hereda todos los atributos y los métodos de la superclase a la que extiende. 
Una subclase es una especialización de la superclase. Normalmente una subclase añade nuevos atributos y métodos que le dan un comportamiento diferente al de la superclase. La herencia es un mecanismo muy importante porque permite la reutilización del código. 
Suponga que se desea diseñar una aplicación para gestionar una empresa de alquiler de vehículos de tipo turismo, deportivo y furgonetas. La clase Vehiculo define los atributos y los métodos de todos los vehículos de la empresa de alquiler. Esto no es suficiente porque hay distintos tipos de vehículos, de manera que es necesario definir subclases para cada tipo de vehículo: turismo, deportivo y furgoneta. En este ejemplo, la superclase es Vehiculo y las subclases son Turismo, Deportivo y Furgoneta. Todas las subclases son vehículos, un turismo, un deportivo y una furgoneta son vehículos, pero cada uno de ellos tiene características propias que le hacen diferente del resto. Para un turismo interesa saber el número de puertas y el tipo de cambio de marcha, para un deportivo interesa saber su cilindrada y para una furgoneta su capacidad de carga en kilos y el volumen en metros cúbicos.

La extensión de una clase tiene la siguiente sintaxis:

public class nombre-subclase extends nombre-superclase {
}

La declaración de la clase Turismo como subclase de Vehiculo:

public class Turismo extends Vehiculo {
}

El esquema muestra la relación de herencia que existe entre la superclase Vehiculo y las subclases Turismo, Deportivo y Furgoneta.



Las subclases Turismo, Deportivo y Furgoneta son especializaciones de la clase Vehiculo. En una relación de herencia, las subclases heredan los atributos y los métodos de la superclase. En la declaración de las subclases se indica la clase a la que extienden, en este caso, Vehiculo.

public class Turismo extends Vehiculo {
}
public class Deportivo extends Vehiculo {
}
public class Furgoneta extends Vehiculo {
}

La declaración de la superclase Vehiculo.

public class Vehiculo {
private String matricula;
private String marca;
private String modelo;
private String color;
private double tarifa = 0.0;
private boolean disponible;
// se omiten los métodos ‘get’ y ‘set’ de la superclase Vehiculo,
// excepto el método getAtributos()
public Vehiculo(String matricula,
String marca,
String modelo,
String color,
double tarifa) {
this.matricula = matricula;
this.marca = marca;
this.modelo = modelo;
this.color = color;
this.tarifa = tarifa;
this.disponible = false;
}
public String getAtributos() {
return "Matrícula: " + this.matricula +
" Modelo: " + this.marca + " " + this.modelo +
" Color: " + this.color +
" Tarifa: " + this.tarifa +
" Disponible: " + this.disponible;
}
}

La declaración de la subclase Turismo.

public class Turismo extends Vehiculo {
private int puertas;
private boolean marchaAutomatica;
public Turismo(String matricula,
String marca,
String modelo,
String color,
double tarifa,
int puertas,
boolean marchaAutomatica) {
super(matricula, marca, modelo, color, tarifa);
this.puertas = puertas;
this.marchaAutomatica = marchaAutomatica;
}
// métodos ‘get’ de la subclase Turismo
public int getPuertas() {
return this.puertas;
}
public boolean getMarchaAutomatica() {
return this.marchaAutomatica;
}
public String getAtributos() {
return super.getAtributos() +
" Puertas: " + this.puertas +
" Marcha automática: " + this.marchaAutomatica;
}
}

La declaración de la subclase Deportivo.

public class Deportivo extends Vehiculo {
private int cilindrada;
public Deportivo(String matricula,
String marca,
String modelo,
String color,
double tarifa,
int cilindrada) {
super(matricula, marca, modelo, color, tarifa);
this.cilindrada = cilindrada;
}
// métodos ‘get’ de la subclase Deportivo
public int getCilindrada() {
return this. cilindrada;
}
public String getAtributos() {
return super.getAtributos() +
" Cilindrada (cm3): " + this.cilindrada;
}
}

La declaración de la subclase Furgoneta.

public class Furgoneta extends Vehiculo {
private int carga;
private int volumen;
public Furgoneta(String matricula,
String marca,
String modelo,
String color,
double tarifa,
int carga,
int volumen) {
super(matricula, marca, modelo, color, tarifa);
this.carga = carga;
this.volumen = volumen;
}
// métodos ‘get’ de la subclase Furgoneta
public int getCarga() {
return this.carga;
}
public int getVolumen() {
return this.volumen;
}
public String getAtributos() {
return super.getAtributos() +
" Carga (kg): " + this.carga +
" Volumen (m3): " + this.volumen;
}
}

Espero haber ayudado en algo. Hasta la próxima oportunidad!











  

2 comentarios:

  1. Excelente aporte y un articulo demasiado bueno. Fácil de entender.
    Les puedo recomendar un curso de java http://www.grupocodesi.com/cursos/curso-de-java-basico.html

    ResponderEliminar
    Respuestas
    1. Hola Anónimo, gracias por la visita y el aporte de tu comentario!!
      Los mejores deseos!! Hasta cualquier instante!!

      Eliminar