Programación Orientada a Objetos Herencia & Polimorfismo en Java Angela C. Carrillo Ramos 1 Herencia Maneja Herencia Simple Distingue tres tipos de visibilidad: visibilidad: pública (public), protegida (protected) y privada (private). (private). "Por default", las clases se derivan unas de otras en forma pública a nivel de paquete. paquete. Se debe decir explícitamente al compilador la visibilidad pública, privada y protegida. protegida. 2 1 Herencia Simple class subclase extends superclase superclase{{ } 3 Herencia Simple Para “simular “simular”” Herencia Múltiple se usan las interfaces Ejemplo: Camion Bus interface Camion{ } class Bus{ Chiva } class Chiva extends Bus implements Camion{…} 4 2 Herencia Simple Una clase sólo puede heredar de una Superclase Una clase puede implementar varias interfaces.. interfaces Una clase que implementa una interface debe implementar TODOS los métodos enunciados en las interfaces de lo contrario se convierte en clase abstracta. abstracta. 5 Clase Abstracta Clase parcialmente definida No se puede hacer un new de una clase abstracta (no tiene instancias) instancias) public abstract class nomclass{} Ej Ej:: public abstract class Poligono{} Los métodos que no se van a definir deben tener el título abstract privacidad abstract tiporetorno nommetodo (par1 (par1,…,parn) ,parn);; Ej Ej:: public abstract float calcularArea(); calcularArea(); 6 3 Ejemplo de Herencia class Punto{ private int x; private int y; public Punto () { x=0; y=0; } public Punto (int x, int y){ this.x=x; this.y=y; } public public public public int darX(){return x;} int darY(){return y;} void cambiarX (int val) {x=val;} void cambiarY (int val) {y=val;} } 7 Ejemplo class Tripleta extends Punto { int z; public Tripleta() { cambiarX(0); cambiarY(0); z = 0; } public Tripleta(int vx, int vy, int vz) { cambiarX(vx); cambiarY(vy); z = vz; } int darZ() { return z; } void cambiarZ(int val) { z = val; } } 8 4 Ejemplo Cuando creamos un objeto con Tripleta t = new Tripleta (1, 2, 3); Se llama al constructor con parámetros con parámetros de Tripleta. Una mejora a este método sería: public Tripleta(int vx, int vy, int vz) { super (vx,vy); z = vz; } 9 Ejemplo public public Tripleta() { Tripleta() { cambiarX(0); z = 0; cambiarY(0); } z = 0; } public Tripleta() { super(); z = 0; } 10 5 Polimorfismo Posibilidad de que un método tenga el mismo nombre y produzca el mismo efecto básico pero esté implementado de forma distinta en las subclases. subclases. 11 Polimorfismo Redefinición de métodos La subclase rere-escribe el método de la superclase Cuando una instancia de la subclase llama el método rere-escrito, llama es su propia definición 12 6 Polimorfismo class Superclase{ … public tipo m1(par1,par2,..,parn){..} } class Subclase extends Superclase{ … public tipo m1(par1,par2,..,parn){..} } 13 Polimorfismo Si el método de la subclase necesita invocar al método de la superclase se utiliza super public tipo m1(par1,par2,..,parn){ super.m1(…); super .m1(…); } 14 7 Polimorfismo Superclase a; Subclase b; b = new Subclase(…); a = b; a.m1(…); ¿A qué método m1 se llama? b = (Subclase) a; b.m1(…); ¿A qué método m1 se llama? 15 Polimorfismo Para conocer la clase a la cual pertenece se utiliza instanceOf Superclase1 obj; A es subclase de Superclase1 if ((obj obj instanceof A) A) // obj pertenece a la clase A A a=(A) obj; // Ok, nunca hay error Siempre debe hacerse el Casting cuando a un elemento de la subclase se le asigna un elemento de la superclase superclase.. 16 8 Ejemplo Rojo r = new Rojo (…); RojoClaro rc= new RojoClaro (…); Color c, c1; c1= new Color (…); c=r; c=rc; c=c1; r=rc; r=(Rojo) c; Color Rojo RojoClaro rc=(RojoClaro) r; rc=(RojoClaro) c; 17 Contenedor Polimórfico Clases que contienen objetos de la clase Object y pueden almacenar cualquier objeto de sus subclases. subclases. Vector Para crear un vector Vector v = new Vector(); Adicionar un elemento al Vector Clase a; v.addElement(a); 18 9 Contenedor Polimórfico Obtener un elemento del Vector Clase a; a= (Clase) v.elementAt(pos); Eliminar un elemento de una posición removeElementAt(pos) Más documentación: http://java.sun.com/j2se/1.3/docs/api/java/ util/Vector.html 19 10