Está en la página 1de 10

17/10/2011

Herencia y Sobrecarga de Mtodos

Curso: Tecnologa de la Programacin I. Docente: Mg. Zoraida Yanet Vidal Melgarejo.


CLASE 07

Herencia
Podemos definir la herencia como la capacidad de crear clases que adquieran de manera automtica los atributos y mtodos de otras clases que ya existen, pudiendo al mismo tiempo aadir atributos y mtodos propios.

17/10/2011

Ventajas de la Herencia
Entre las principales ventajas que ofrece la herencia en el desarrollo de aplicaciones estn: Reutilizacin de cdigo. En aquellos casos donde se necesite crear una clase que, adems de mtodos propios, debe incluir los mtodos definidos en otra, la herencia evita tener que reescribir todos esos mtodos en la nueva clase. Mantenimiento de Aplicaciones existentes. Utilizando la herencia, si tenemos una clase con una determinada funcionalidad y tenemos la necesidad de ampliar dicha funcionalidad, no necesitamos modificar la clase existente (la cual se puede seguir utilizando para el tipo de programa que fue diseada) sino que podemos crear una clase que herede a la primera, adquiriendo toda su funcionalidad y aadiendo la suya propia.
3

Nomenclatura y Reglas

En POO, a la clase que va a ser heredada se le llama superclase o clase base, mientras que a la que hereda se le conoce como subclase o clase derivada. Grficamente, la herencia entre dos clases se representa como una flecha saliendo de la subclase hacia la superclase.

17/10/2011

Diagrama UML
Clase Padre

Clase Hija

Reglas Bsicas
Hay unas reglas bsicas sobre la herencia en Java que hay que tener presentes En Java no esta permitido la herencia Mltiple, es decir, una subclase no puede heredar ms de una clase.

Si es posible la herencia multinivel, es decir, A puede ser Heredada por B y B puede ser heredada por C. Una clase puede ser heredada por varias clases.

17/10/2011

La Relacion es un

La herencia entre dos clases establece una relacin entre las mismas de tipo es un, lo que significa que un objeto de una subclase tambin es un objeto de la superclase. Por ejemplo, Vehculo es una superclase de Automvil, por lo que un automvil es un Vehculo. De la misma forma Animal es la superclase de Mamfero y esta a su vez superclase de Len, esto nos lleva a que Len es un Mamfero y es un animal.

Creacin de Herencia en Java


A la hora de definir una clase que va a heredar de otra clase se utiliza la palabra extends, seguida del nombre de la superclase en la cabecera de la declaracin: public class SubClase extends SuperClase { // cdigo de la subclase } La nueva clase podr incluir atributos y mtodos propios para completar su funcin.
8

17/10/2011

La Clase Object
Todas las clases de Java heredan alguna clase. En caso de que no se especifique mediante extends la clase que se va a heredar, implcitamente hereda de Object. Esta clase se encuentra en el paquete java.lang y proporciona el soporte bsico para cualquier clase Java. As pues, la definicin de una clase que no herede explcitamente a otra equivale a: public class NombreClase extends Object { // cdigo de la clase } La clase Object es, por tanto, la superclase de todas las clases de Java.
9

Ejecucin de constructores con la herencia

Hay que hacer especial mencin al comportamiento de los constructores de la superclase y subclase cuando se va a crear un objeto de esta ltima. Como norma universal, cada vez que en Java se crea un objeto de una clase, antes de ejecutarse el constructor de dicha clase se ejecutara primero el de su superclase. Segn esto, tras la ejecucin del mtodo main() del siguiente programa:

10

17/10/2011

Ejemplo de herencia
public class Primera { public Primera() { System.out.println(Constructor de la superclase); } } public class Segunda extends Primera { public Segunda() { System.out.println(Constructor de la subclase); } }
11

Ejemplo de herencia
public class Principal { public static void main(String args[]) { Segunda s = new Segunda(); } }

Aparecer en la pantalla: Constructor de la superclase Constructor de la subclase

12

17/10/2011

Ejemplo de herencia
La explicacin a esta situacin la tenemos en el hecho de que el compilador java, aade, como primera lnea de cdigo en todos los constructores de una clase la siguiente instruccin: super(); Instruccin que provoca una llamada al constructor sin parmetros de la superclase. Los constructores por defecto tambin incluyen esta instruccin, as pues, el aspecto real de estos constructores es: public NombreClase(){ super(); }
13

Ejemplo de herencia
Si en vez de llamar al constructor sin parmetros quisiramos invocar a cualquier otro constructor de la superclase, deberamos hacerlo explcitamente, aadiendo como primera lnea del constructor de la subclase la instruccin: super(argumentos) Los argumentos son los parmetros que necesita el constructor de la superclase que se desea invocar. Esto permite entre otras cosas, que el constructor de la subclase pueda pasarle al constructor de la superclase los datos necesarios para la inicializacin de los atributos privados y que no son accesibles desde la subclase.

14

17/10/2011

Mtodos y atributos Protegidos

Existe un modificador de acceso aplicable a atributos y mtodos de una clase, pensando para ser utilizado con la herencia. Se trata del modificador protected. Un miembro de una clase (atributo o mtodo) definido como protected ser accesible desde cualquier subclase de sta, independientemente de los paquetes en que estas clases se encuentren.

15

Clases Finales
Si queremos evitar que una clase sea heredada por otra, deber ser declarada con el modificador final delante de class public final class ClaseA { . } Si otra clase intenta heredar una clase final se producir un error de compilacin. Por ejemplo esta clase no compilar: public class ClaseB extends ClaseA { // cdigo de la ClaseB }
16

17/10/2011

Sobreescritura de Mtodos
Cuando una clase hereda de otra, el comportamiento de los mtodos que hereda no siempre se ajusta a las necesidades de la nueva clase. En estos casos, la subclase puede optar por volver a reescribir el mtodo heredado, es lo que se conoce como sobreescritura de un mtodo. A la hora de sobrescribir un mtodo hay que tener en cuenta las siguientes reglas:

17

Reglas para la Sobreescritura de Mtodos

Cuando se sobrescribe un mtodo en una subclase, ste debe tener exactamente el mismo formato que el mtodo de la superclase que sobrescribe. Esto significa que deben llamarse igual, tener los mismos parmetros y mismo tipo de devolucin. Hay que tener presente si al intentar sobrescribir un mtodo en una subclase se mantiene el mismo nombre y se modifican los parmetros, el nuevo mtodo no sobrescribe al de la superclase pero tampoco ocurre un error de compilacin, ya que estaramos en un caso de sobrecarga de mtodos: dos mtodos con el mismo nombre y distintos parmetros.

18

17/10/2011

Reglas para la Sobreescritura de Mtodos

El mtodo sobrescrito puede tener un modificador de acceso menos restrictivo que el de la superclase. Por ejemplo, el mtodo de la superclase puede ser protected y la versin sobrescrita en la subclase puede ser public, pero nunca uno ms restrictivo. Para llamar desde el interior de la subclase a la versin original del mtodo de la superclase, debe utilizarse la expresin: super.nombreMetodo(argumentos); Si no se utiliza super delante del nombre del mtodo, se llamar a la versin sobrescrita de la clase.

19

10

También podría gustarte