Herencia, jerarquía de clases abstractas.
Material pdf: Descargar pdf
HERENCIA
Definición
Permite a una clase compartir la misma estructura de
datos y comportamiento de otra clase.
La herencia minimiza la necesidad de duplicar código.
El Polimorfismo permite utilizar el método de acuerdo
al objeto heredado.
Una subclase se define indicando a que superclase
extiende.
public class padre
{
// Definición de la superclase Item.
}
public class hijo extends padre{
// Atributos y métodos adicionales para distinguir
una
// hijo de otros tipos de item
}
Una subclase hereda todas las variables instancia de la
superclase.
Las variables de instancia deben ser private para que
instancias de la subclase hereden sus valores.
public class Item {
protected float precio = 0;
protected String estado = "Excelente";
}
public class Pelicula extends Item {
private String titulo = "";
private int duracion = 0;
}
Una subclase no hereda ningún constructor de la
superclase, debe declararse explícitamente.
Solo en caso no se declare explícitamente, se
ejecutaran los constructores por defecto de las superclases y finalmente de la
subclase.
Pelicula pelicula = new Pelicula ();
//Inicia variables de la clase Item. Constructor por defecto.
// Inicia variables de la clase Pelicula. Constructor por defecto.
La referencia super
Se refiere a la clase padre
Se usa para invocar constructores de la clase padre
Debe ser la primera sentencia del constructor de la clase hijo
Esta referencia también se usa para invocar cualquier método del padre.
public class Item {
protected float precio = 0;
Item (float precio) {
this.precio = precio;
}
}
public class Pelicula extends Item {
private String titulo = "";
Pelicula (float precio, String titulo) {
super(precio);
this.titulo = titulo;
}
}
Métodos
La superclase define los métodos para todas las subclases.
La subclase puede especificar métodos propios.
File:item0.java
package herencia;
public class item0 {
protected float precio=0;
public item0(float precio) {
this.precio=precio;
}
public float getPrecio() {
return precio;
}
public void setPrecio(float precio) {
this.precio = precio;
}
}
File: pelicula.java
package herencia;
public class pelicula extends item0 {
private String titulo="";
public pelicula(float precio, String titulo) {
super(precio);
this.titulo=titulo;
}
public String getTitulo() {
return titulo;
}
public void setTitulo(String titulo) {
this.titulo = titulo;
}
}
package herencia;
File:testsuper.java
public class testsuper {
public static void main(String []args){
pelicula pelicula=new pelicula(2.2f,"Araña");
System.out.println(pelicula.getPrecio());
System.out.println(pelicula.getTitulo());
}
}
Ejemplo
public class Mamifero{
private int patas;
private String nombre;
public void imprimirPatas(){
System.out.print(" Tiene "+patas+"
patas\n");
}
public Mamifero(String nombre, int patas){
this.nombre = nombre;
this.patas = patas;
}
}
//clases gato
public class gato extends Mamifero {
public gato(String nombre){
super(nombre,4);
}
}
//clase perro
public class perro extends Mamifero {
public perro(String nombre){
super(nombre,4);
}
}
//Creando perro
public class crear_perro {
public static void main(String []args){
perro perrito=new perro("Pantaleon");
perrito.imprimirPatas();
}
}
Clase Abstracta
La herencia permite que existan clases que nunca serán
instanciadas directamente. En el ejemplo anterior, una clase "perro"
heredaría los atributos y métodos de la clase "mamífero", así como
también "gato", "delfín" o cualquier otra subclase; pero,
en ejecución, no habrá ningún objeto "mamífero" que no pertenezca a
alguna de las subclases. En ese caso, a una clase así se la conocería como Clase Abstracta. La ausencia de
instancias específicas es su única particularidad, para todo lo demás es como
cualquier otra clase.
Herencia y ocultación de información
En ciertos lenguajes, el diseñador puede definir qué
variables de instancia y métodos de los objetos de una clase son visibles. En
C++ y java esto se consigue con las especificaciones private, protected y public. Sólo las variables y métodos
definidos como públicos en un objeto serán visibles por todos los objetos.
Dependiendo del lenguaje que se utilice, el diseñador
también puede controlar qué miembros de las superclases son visibles en las
subclases. En el caso de java y C++ los especificadores de acceso (private,
protected, public) de los miembros de la superclase afectan también a la
herencia:
Private: ningún
miembro privado de la superclase es visible en la subclase.
Protected: los
miembros protegidos de la superclase son visibles en la subclase, pero no
visibles para el exterior.
Public: los
miembros públicos de la superclase siguen siendo públicos en la subclase.
Ventajas
Ayuda a los programadores a ahorrar código y tiempo, ya
que la clase padre ha sido implementada y verificada con anterioridad, restando
solo referenciar desde la clase derivada a la clase base (que suele ser extends, inherits, subclass u
otras palabras clave similares, dependiendo del lenguaje).
Los objetos pueden ser construidos a partir de otros
similares. Para ello es necesario que exista una clase base (que incluso puede
formar parte de una jerarquía de clases más amplia).
La clase derivada hereda el comportamiento y los
atributos de la clase base, y es común que se le añada su propio comportamiento
o que modifique lo heredado.
Toda clase
pueden servir como clase base para crear otras.
Ejemplo – clase humano
class humano {
protected String nombre;
protected String apellido;
public humano(String nombre,String apellido) {
this.nombre = nombre;
this.apellido = apellido;
}
public String nombreCompleto() {
return this.apellido + ", " + this.nombre;
}
public String identificacion() {
return this.nombreCompleto();
}
}
public class ciudadano extends humano {
protected String documento;
public ciudadano(String nombre,String apellido, String
documento) {
super(nombre,apellido);
this.documento = documento;
}
public String identificacion() {
return super.identificacion() + ", documento:
" + this.documento;
}
}
public class herencia {
public static void main(String []args){
ciudadano a=new
ciudadano("Christian","Garcia","42809561");
System.out.println(a.identificacion());
}
}
No hay comentarios:
Publicar un comentario