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