Vous êtes sur la page 1sur 5

Lenguaje de Programacin Ing.

Jorge Butler

HERENCIA Definicin La herencia es un mecanismo que permite la definicin de una clase a partir de la definicin de otra ya existente. La herencia permite a un conjunto de clases relacionadas permanecer bajo un nico paraguas, de forma que puedan ser consideradas y manejadas colectivamente. La herencia permite el refinamiento o especializacin de una clase existente: Se pueden definir los miembros Se pueden ocultar los miembros Se pueden aadir nuevos miembros La herencia es la caracterstica clave de los sistemas orientados a objeto para propiciar la reusabilidad.

Base Padre Super

Pelota

Derivada Hija Sub

Ftbol

Tenis

PingPong

Ejemplo: La clase Pelota es la clase padre (o base, o superclase) en la jerarqua de abajo. Sus mtodos y atributos son heredados por las clases derivadas (o hijas, o subclases). Para expresar una clase heredada en Java se utiliza la palabra reservada extends: class nombre_de_clase extends nombre_de_superclase { Cuerpo_de_la_clase }

Superclase y Subclases El concepto de herencia conduce a una estructura jerrquica de clases o estructura de rbol, lo cual significa que en la OOP todas las relaciones entre clases deben ajustarse a dicha estructura. En esta estructura jerrquica, cada clase tiene slo una clase padre. La clase padre de cualquier clase es conocida como su superclase. La clase hija de una superclase es llamada una subclase. Una superclase puede tener cualquier nmero de subclases. Una subclase puede tener slo una superclase.

A es la superclase de B, C y D.

Lenguaje de Programacin Ing. Jorge Butler

D es la superclase de E. B, C y D son subclases de A. E es una subclase de D. Uso del super La variable especial super refiere a la superclase de la clase actual. Representa la referencia interna implcita a la clase base (superclase). Cuando se declara una clase heredando explcitamente de otra como en el cdigo siguiente: public class Subclase extends Superclase { } Los mtodos constructores no slo han de inicializar las propiedades de la subclase sino tambin las de la superclase, para ello, los constructores de la subclase pueden llamar a constructores de la superclase, gracias a super. Super permite acceder, desde la subclase, a los mtodos y las variables de la superclase: public class Subclase extends Superclase { public Subclase(int x, int y, int z){ super(x, y); //variables de la superclase this.z = z; //variable de la subclase } } El uso de super es opcional pero, en caso de utilizarse, ha de ser obligatoriamente la primera sentencia del constructor. Si no se utiliza, el compilador inserta la sentencia super() al comienzo de cada mtodo constructor de la subclase. Super tambin permite sobreescribir un mtodo de la superclase aadindole nuevas funcionalidades. Por ejemplo, el cdigo: public class Subclase extends Superclase { public void hacerAlgo() { //redefine el mtodo super.hacerAlgo(); // llama al mtodo de la superclase hacerOtraCosa(); // llama a otro mtodo de la subclase // resto de cdigo } } Permite ampliar la funcionalidad del mtodo hacerAlgo() sobreescribindolo con el mtodo hacerAlgo() de la subclase. de la superclase,

Ejemplo: En una tienda se venden 2 tipos de ordenadores: porttiles y de sobremesa (PCs). Ambos tipos de ordenadores se caracterizan por su velocidad de proceso. De acuerdo a la velocidad de proceso los precios de los ordenadores de sobremesa varan en: Proceso Precio (S/.) 1.6 Mhz 1200.00 1.7 Mhz 1800.00 1.8 Mhz 2140.00 El precio de las porttiles se incrementa en un 70% del precio de los ordenadores de sobremesa, teniendo en cuenta su velocidad de proceso. El precio final de los ordenadores de sobremesa se calcula incrementando el 19% de igv, adems se le recarga S/50.00 por servicio tcnico, para el caso de los ordenadores porttiles se calcula incrementando el 19 % de igv y el 5% de garanta. Elaborar un programa que muestre el total que se paga por un ordenador de sobremesa y un ordenador porttil. public class Ordenadores { private double vel, prec, igv, total;

Lenguaje de Programacin Ing. Jorge Butler

public void calcularPrecio(){ if(vel==1.6) prec=1200; else if(vel==1.7) prec=1800; else if(vel==1.8) prec=2140; } public void calcularIgv(){ igv=0.19*prec; } public double getIgv() { return igv; } public void calcularTotal(){ total=prec+igv; } public void setIgv(double igv) { this.igv = igv; } public double getPrec() { return prec; } public void setPrec(double prec) { this.prec = prec; } public double getTotal() { return total; } public void setTotal(double total) { this.total = total; } public double getVel() { return vel; } public void setVel(double vel) { this.vel = vel; } public Ordenadores() { } } public class Portatiles extends Ordenadores{ private double inc, gar; public void calcularIncremento(){ super.calcularPrecio(); inc=0.70*getPrec(); } public void calcularPrecio(){ super.calcularPrecio(); setPrec(getPrec()+inc); } public void calcularGarantia(){ gar=0.05*getPrec(); } public void calcularTotal(){ super.calcularTotal(); setTotal(getTotal()+gar); }

Lenguaje de Programacin Ing. Jorge Butler

public double getGar() { return gar; } public void setGar(double gar) { this.gar = gar; } public double getInc() { return inc; } public void setInc(double inc) { this.inc = inc; } public Portatiles() { } } public class Sobremesa extends Ordenadores{ private double serTec; public void calcularTotal(){ super.calcularTotal(); setTotal(getTotal()+serTec); } public double getSerTec() { return serTec; } public void setSerTec(double serTec) { this.serTec = serTec; } public Sobremesa() { serTec=50; } } import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Aplicacion { public static void main(String[] args) throws IOException{ Sobremesa s=new Sobremesa(); InputStreamReader x=new InputStreamReader(System.in); BufferedReader y=new BufferedReader(x); System.out.println("Ingresar velocidad"); s.setVel(Double.parseDouble(y.readLine())); s.calcularPrecio(); s.calcularIgv(); s.calcularTotal(); System.out.println("El precio final es "+s.getTotal()); Portatiles p=new Portatiles(); System.out.println("Ingresar velocidad"); p.setVel(Double.parseDouble(y.readLine())); p.calcularIncremento(); p.calcularPrecio(); p.calcularGarantia(); p.calcularIgv(); p.calcularTotal(); System.out.println("El precio final es "+p.getTotal());

} }

Lenguaje de Programacin Ing. Jorge Butler

Tipos de Herencia Herencia simple Cuando una clase slo puede derivar de una nica superclase. En Java slo se dispone de herencia simple, para una mayor sencillez del lenguaje, si bien se compensa de cierta manera la inexistencia de herencia mltiple con un concepto denominado interface. Herencia multiple (Interfases) Cuando una clase puede descender de varias superclases. Una clase se diferencia de otra por sus propiedades y sus comportamientos, as mismo, las similitudes de estas caractersticas son las que agrupan en jerarquas de herencia. Sin embarga en Java una clase solo puede derivar de una y nada mas que de una clase, de la que hereda propiedades y comportamientos. En ocasiones, algunas clases que no se encuentran en el mismo rbol requieren compartir caractersticas similares, para este caso Java a implementado las interfaces, permitiendo as una herencia mltiple. Por ejemplo: si se tiene las clases Animal y Maquina, y en estas se desea implementar el mtodo sonido, se tendr que hacer uso de las interfaces. Declaracion de una interface interface nombre_de_interfaz{ Tipo_de_retorno Nombre_del_metodo1 (lista de parametros); Tipo_de_retorno Nombre_del_metodo2 (lista de parametros); ... tipo variable_final1 = valor_constante; tipo variable_final2 = valor_constante; ... }

Vous aimerez peut-être aussi