Está en la página 1de 3

Herencia en Java La idea de la herencia es permitir la creacin de nuevas clases basadas en clases existentes.

Cuando heredamos de una clase existente, reusamos (o heredamos) mtodos y campos, y agregamos nuevos campos y mtodos para cumplir con la situacin nueva. Cada vez que encontremos la relacin "es-un" entre dos clases, estamos ante la presencia de herencia. La clase ya existente es llamada superclass, o clase base, o clase padre. La clase nueva es llamada subclase, clase derivada, o clase hija. A travs de la herencia podemos agregar nuevos campos, y podemos agregar o sobre montar mtodos (override). Sobre montar un mtodo es redefinirlo en la case heredada. Estudio de ejemplos: ManagerTest.java Destacar uso de super para invocar al constructor de la clase base y para invocar a mtodos sobremontados. Jerarqua de Herencia

Polimorfismo En Java una variable o nombre usado para referirse a un objeto de una clase X puede usarse para referirse a cualquier objeto de cualquier subclase de la clase X. Por ejemplo: Si tenemos Employee e; e= new Employee(...); o e= new Manager(...); Esto tambin aplica a arreglos de Employee, cuyas entradas podran referirse a instancias de cualquier subclase de Employee. El inverso no es vlido. No se puede asignar una instancia de la superclase a un nombre para la subclase. Esta es una forma de polimorfismo por que e puede referirse a un Employee o a un Manager. Ligado Dinmico Es importante entender qu mtodo es aplicado al invocar uno a un objeto que se

puede referir a instancias de distinta clase. Al momento de la compilacin el compilador intenta resolver el mtodo que corresponde segn su nombre y parmetro. Si la superclase y la clase base tiene definido el mismo mtodo Cul se llama?. Si el mtodo en la clase declarada para la variable no es privado, static, o final, se invocar en forma dinmica. Esto es, se invocar el mtodo definido segn el objeto referenciado por el nombre y no segn la declaracin del nombre. Por ello, si una clase derivada redefine el mismo mtodo, ste ser invocado. Casting Cmo podemos acceder a los mtodos definido en una clase derivada pero no en la base? Se debe hacer un cambio de tipo forzado. Por ejemplo: Employee e= new Manager(..); Usando e no podemos acceder a los mtodos slo presentes en Manager. Si queremos hacerlo, usamos: Manager m = (Manager) e; Ahora s podemos invocar todos los mtodos de Manager sobre m. Cmo sabemos que e aloja una instancia de Manager? Lo podemos preguntar con el operador instanceof. if (e instance of Manager) { m = (Manager) e; ..... } Clases Abstractas (abstract classes) Llevando la idea de herencia a un extremo podemos pensar en buenas clases para representar un grupo pero que no tienen instancias propias. Por ejemplo Forma como clase base de Triangulo, Circulo, Cuadrado. Forma puede indicar todo el comportamiento vlido para una forma pero no puede instanciarse por si mismo. En ente caso Forma debe declararse como clase abstracta por tener al menos un mtodo declarado pero no implementado. public abstract public } ver Perros y class abstract Forma double { ... area(); ..

PersonTest.java gatos

Superclase Object Toda clase en Java hereda de la clase Object. sta no requiere ser indicada en forma explcita. Esto permite que podamos agrupar en forma genrica elementos de

cualquier clase. En esta clase hay mtodos como equals() y toString() que en la mayora de loa casos conviene sobremontar. ver documentacin de clase Object. Ver (alumnos) EqualsTest.java

Programacin Genrica (Generic Programming) Se le llama al hecho que podamos crear cdigo vlido para cualquier tipo de dato especfico. Por ejemplo en alguna clase podramos incorporar: static { int find (Object [ int ] < return // a , Object key)

for (i=0; i if (a[i].equals(key) return -1;

i;

i; a.length; i++) // encontrado no exitoso

También podría gustarte