HERENCIA
HERENCIA
Temas de desarrollar:
9.1 Fundamentos
9.2 Implementado la Herencia
9.3 Palabras claves this y super
9.4 Palabras claves: abstract, final y static
9.1 FUNDAMENTOS
Por si misma, la idea de objeto es una herramienta ms que buena. Permite
empaquetar datos y funcionalidad, de manera que es posible representar
cualquier idea del universo del problema mediante clases.
Es posible utilizar clases ya definidas para crear a partir de estas nuevas
clases (clase heredada), y luego agregarle funcionalidad adicional segn las
necesidades de esta nueva clase.
En terminologa de la POO, una clase heredada se llama superclase; y la
clase que hereda se denomina subclase. Por lo tanto, una subclase es una
versin especializada de la superclase, que hereda todas las definiciones de la
superclase (atributos y mtodos) y aade su propia funcionalidad.
superclase
subclase
CalculadoraBase
Calculadora1
En la figura 9.2 se puede apreciar que la subclase hereda los mtodos suma y
resta, he implementa los mtodos factorial y esPrimo.
Una instancia de la clase CalculadoraBase solo tendr los mtodos suma y
resta, mientras que una instancia de la clase Calculadora1 tendr los mtodos
heredados suma y resta, y adems sus mtodos propios factorial y esPrimo.
A continuacin, tenemos la implementacin de la clase CalculadoraBase,
usted puede apreciar claramente la implementacin de los mtodos suma y
resta
CalculadoraBase.java
public class CalculadoraBase {
Calculadora1.java
public class Calculadora1 extends CalculadoraBase {
prog0901.java
public class prog0901
{
public static void main (String [] args)
{
int n1=17, n2=6;
Calculadora1 cal=new Calculadora1();
//implementacin
CuentaBancaria
CuentaAhorro CuentaCorriente
Por ejemplo, en la figura 9.3 tenemos una clase base CuentaBancaria que
define las caractersticas comunes a todas las cuentas, y a partir de esta se
obtiene dos subclases CuentaAhorro y CuentaCorriente.
A continuacin, tenemos el cdigo bsico para la implementacin de estas
clases:
public class CuentaBancaria {
//Implementacin
}
public class CuentaAhorro extends CuentaBancaria {
//Implementacin
}
public class CuentaCorriente extends CuentaBancaria {
//Implementacin
Donde:
Para que los campos puedan ser heredados deben ser pblicos (public) o
protegidos (protected). Los campos protegidos (protected) se comportan como
pblicos dentro de su propio paquete.
Cuando no se utiliza ningn especificar de acceso, el campo es por efecto
pblico (public) dentro de su propio paquete, pero no es posible su acceso
desde otro paquete, esto quiere decir que es heredado por subclases dentro
de su mismo paquete.
HERENCIA DE MTODOS
Sintaxis
//Implementacin
}
Donde:
Para que los campos puedan ser heredados deben ser pblicos (public) o
protegidos (protected). Los campos protegidos (protected) se comportan como
pblicos dentro de su propio paquete.
Cuando no se utiliza ningn especificar de acceso, el campo es por efecto
pblico (public) dentro de su propio paquete, pero no es posible su acceso
desde otro paquete, esto quiere decir que es heredado por subclases dentro
de su mismo paquete.
Ejemplo 9.2
En este ejemplo se ilustra los diferentes tipos de acceso a los miembros de
una clase.
Test
a:int
+b:int
#c:int
-d=int
+setD(n:int): void
+getD ():int
Test.java
public class test {
int a; // Acceso por defecto
public int b; //Acceso public
protected int c; //Acceso protegido
private int d; //Acceso privado
prog0902.java
public class prog0902 {
public static void main (String [] args) {
Test obj=new Test ();
// b es publico
obj. b=70
//salida
System.out.println(a= +obj. a);
System.out.println(b= +obj. b);
System.out.println(c= +obj.c);
System.out.println(d= +obj. getD ());
}
}
Compilacin y ejecucin:
C:\java2n100\cap9>javac prog0902.java [Enter]
C:\java2n100\cap9>javac prog0902 [Enter]
a=50
b=70
c=80
d=100
class Demo {
private int n;
Empleado
public void setN (int n) {
-codigo: int
-nombre: String this.n=n;
-sueldo: Double
}
+Empleado (cdigo: int, nombre: String, sueldo: Double)
+Empleado } (nombre: String)
+toString (): String
Empleado.java
public class Empleado {
// Atributos:
// Constructores:
public Empleado (int codigo, String nombre, Double sueldo) {
this. codigo=codigo;
this. nombre=nombre;
this. sueldo=sueldo;
}
public Empleado (String nombre) {
this (1000, nombre, 3500.00);
}
// Operaciones
Esta clase tiene tres campos privados: cdigo, nombre y sueldo; tiene
tambin dos constructores, el primero recibe tres datos (cdigo, nombre y
sueldo), mientras que el segundo recibe solo el nombre y asume los otros
dos datos, tal como se puede apreciar en el script, pero invoca al primer
constructor mediante la palabra clave this; el otro mtodo (toString) retoma
una cadena con los tres datos del empleado.
Programa ilustrativo para el uso de la clase Empleado.
prog0903.java
public class prog0903{
System.out.println(Empleado 1: + emp1.toString());
System.out.println(Empleado 2: + emp2.toString());
}
}
Compilacin y ejecucin:
C:\java2n100\cap9>javac prog0903.java [Enter]
super(lista_de_parametros);
super. miembro
Persona.java
public class Persona {
// Atributos:
// Constructores:
// Operaciones
Esta clase tiene un constructor a travs del cual se asigna los datos, y un
mtodo (toString) que retorna los datos de la persona concatenados y
separados por un guion.
A continuacin, tenemos la implementacin de la clase Trabajador:
Trabajador.java
public class Trabajador extends Persona {
// Operaciones:
public Trabajador (int codigo, String nombre, Double sueldo, Double bonificacin)
{
super (cdigo, nombre, sueldo + bonificacin);
}
Docente.java
public class Docente extends Persona {
// Operaciones:
public Trabajador (int codigo, String nombre, int horas, Double importePorHora) {
super (cdigo, nombre, horas*importePorHora);
}
prog0904.java
public class prog0904{
public static void main (String [] args) {
Trabajador tra=new Trabajador (500, Julio Flores, 2000.00, 500.00);
Docente doc = new Docente (501, Gustavo coronel, 150, 50.00);
System.out.println();
System.out.println(tra. toString () + \n);
System.out.println(doc. toString ());
}
}