Documente Academic
Documente Profesional
Documente Cultură
Herencia
Una de las caractersticas fundamentales de la POO que ms destacan es la herencia. La herencia provee el mecanismo ms simple para especificar una forma alternativa de acceso a una clase existente. Esta nueva clase se denomina subclase o clase derivada y la clase existente superclase o clase base.
Herencia
La herencia se basa en la existencia de relaciones de generalizacin/especializacin entre clases. Una jerarqua de clases muestra cmo los objetos se derivan de otros objetos ms simples heredando su comportamiento.
Clase Cuentas
Clase CuentaCorriente
Clase CuentaAhorro
miembros que una clase que no lo sea y adems puede tener mtodos abstractos, que una clase no abstracta no puede contener, pero NO se permite crear objetos de ella.
Un mtodo abstracto tiene la particularidad de no tener
cuerpo.
redefinidos en las subclases de la clase abstracta, con la intencin de adaptarlos a las necesidades particulares de stas.
Ejemplo
Ejemplo
Clase: Animal
Clase: Mamifero
Clase: Ave
Clase Animal
} {
//atributos private String nombre; private String sonido; private int numPatas; //constructor sin argumentos public Animal() {
nombre=nom; } public void setSonido(String son) { sonido=son; } public void setNumPatas(int numP) { numPatas=numP; }
public String getNombre() { return nombre; } public String getSonido() { return sonido; } public int getNumPatas() { return numPatas; } //mtodo abstracto que se redefinir en las clases derivadas public abstract void setAccion(); public abstract String getAccion(); }
import javax.swing.JOptionPane; public class Mamifero extends Animal{ //atributos String acc; //constructor public Mamifero() { acc="No hace nada"; } public Mamifero(String nom, String son, int numP, String ac) { setNombre(nom); setAccion(ac); setNumPatas(numP); setSonido(son); } //mtodo que se sobrescribe public void setAccion() { acc=JOptionPane.showInputDialog("Qu accion hace este mamfero?"); } public void setAccion(String ac) { acc=ac; } public String getAccion() { return acc; } }
Clase Mamfero
Clase Ave
public class Ave extends Animal{ String acc; //constructor public Ave() { setNombre("pioln"); setAccion(); setNumPatas(2); setSonido("tui, tui, tuiii"); } //mtodo que se sobrescribe public void setAccion() { acc="volar"; } public String getAccion() { return acc; } }
Clase Herencia
import javax.swing.JOptionPane; public class Herencia1 { public static void main(String[] args) { Mamifero perro = new Mamifero(); perro.setAccion(); perro.setNombre("franky"); perro.setNumPatas(4); perro.setSonido("guuaauu, guau..."); JOptionPane.showMessageDialog(null,"Nombre: "+perro.getNombre()+"\nHace sonido: "+perro.getSonido()+"\nLe gusta: "+perro.getAccion()); Mamifero gato = new Mamifero("Pachoncito","miuu, miauu",4,"ronronea"); JOptionPane.showMessageDialog(null,"Nombre: "+gato.getNombre()+"\nHace sonido: "+gato.getSonido()+"\nLe gusta: "+gato.getAccion()); Ave canario = new Ave(); JOptionPane.showMessageDialog(null,"Nombre: "+canario.getNombre()+"\nHace sonido: "+canario.getSonido()+"\nLe gusta: "+canario.getAccion()); } }
();
public class ClaseBase { public int valor=5; public ClaseBase(int x) { valor=x; } public void setValor(int x) { valor=x; } public int getValor() { return valor; } }
Ejemplo (main)
import javax.swing.JOptionPane; public class Prueba { public Prueba() { } public static void main(String[] args) { int a, b; a=Integer.parseInt(JOptionPane.showInputDialog("Escribe un nmero")); b=Integer.parseInt(JOptionPane.showInputDialog("Escribe otro nmero")); ClaseDerivada m1 = new ClaseDerivada(a,b); JOptionPane.showMessageDialog(null,"Valor de la clase base: "+m1.getValor2()); JOptionPane.showMessageDialog(null,"Valor de la calse derivada: "+m1.getValor()); } }
Conversiones implcitas
Java permite convertir implcitamente una referencia a un objeto de una subclase en una referencia a su superclase. Ejemplo 1: public class Prueba1 { public static void main(String[] args) { CCuentaCorriente cliente1; cliente1 = new CCuentaConInt("cliente1","1245",1000,3.5); String cuenta = cliente1.obtenerCuenta(); double saldo = cliente1.obtenerSaldo(); } }
Otro ejemplo
CCuenta cliente; CCuentaCorriente cliente1 = new
CuentaConrriente("cliente1","1245",1000,3.5);
CuentaConInt("cliente2","4685",2545,2.0); cliente = cliente1; String nombre = cliente.obtenerNombre(); //... cliente = cliente2; String cuenta = cliente.obtenerCuenta();