bloque4:herencia
Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
bloque4:herencia [05/03/2018 07:28] – [Palabra clave super] Fernando Valdeón | bloque4:herencia [05/03/2018 11:35] (actual) – borrado Fernando Valdeón | ||
---|---|---|---|
Línea 1: | Línea 1: | ||
- | ====== Herencia de Clases ====== | ||
- | En Java podemos tener clases que heredan de otras (extends, o extienden). Cuando una clase hereda de otra puede hacer uso de los atributos de su clase padre. Además, permite reescribir métodos en caso de que en una subclase queramos concretar su funcionamiento. | ||
- | Debemos tener en cuenta que toda clase en Java hereda de la clase '' | ||
- | |||
- | {{ : | ||
- | ==== ¿Para qué sirve? ==== | ||
- | La herencia es un mecanismo mediante el cual aprovechamos la implementación de operaciones de una clase padre (reutilización de código) y creamos nuevas clases hijas a partir de esa clase: | ||
- | * Heredando y posiblemente modificando y/o añadiendo operaciones. | ||
- | * Heredando y posiblemente añadiendo atributos. | ||
- | |||
- | **Debemos tener en cuenta que un método o atributo heredado mediante el mecanismo de herencia no puede ser suprimido en la subclase.** | ||
- | |||
- | Podríamos decir que la herencia nos permite usar el código empleando en una clase para no tener que volverlo a escribir en una subclase. Todas las subclases tienen las operaciones de la superclase, y así no tenemos que repetir el código en cada una. | ||
- | ===== Declaración de una Subclase ===== | ||
- | Si entendemos que una clase son “los planos” que definen la creación de un ejemplar de esa clase, podemos entender que cuando una clase hereda de otra, lo que está haciendo es usar los planos de la clase padre, y añadirle más información para crear más o diferentes funcionalidades a las que tenía. | ||
- | |||
- | Podemos llamar a las clases hijas '' | ||
- | Para que una subclase herede de una superclase debe usarse '' | ||
- | |||
- | Ejemplo de superclase: '' | ||
- | |||
- | <code java> | ||
- | public class Vehiculo{ | ||
- | | ||
- | | ||
- | |||
- | | ||
- | return Km; | ||
- | } | ||
- | |||
- | | ||
- | this.Km = Km; | ||
- | } | ||
- | |||
- | | ||
- | return matricula; | ||
- | } | ||
- | |||
- | | ||
- | this.matricula = matricula; | ||
- | } | ||
- | } | ||
- | </ | ||
- | |||
- | {{: | ||
- | Ahora vemos su uso y vemos que aparecen los métodos '' | ||
- | |||
- | Además del resto de métodos heredados de la clase '' | ||
- | |||
- | ---- | ||
- | |||
- | ==== Palabra clave Extends ==== | ||
- | |||
- | Vamos a crear ahora la clase '' | ||
- | <code java> | ||
- | public class Coche extends Vehiculo{ | ||
- | |||
- | // | ||
- | | ||
- | |||
- | // | ||
- | | ||
- | this.cilindrada = cilindrada; | ||
- | } | ||
- | |||
- | | ||
- | return cilindrada; | ||
- | } | ||
- | } | ||
- | </ | ||
- | |||
- | {{: | ||
- | Aquí vemos como aparecen los métodos heredados de la superclase Vehiculo: '' | ||
- | |||
- | Además tiene sus propios miembros específicos '' | ||
- | |||
- | También | ||
- | clase '' | ||
- | Ambas clases (Vehiculo y Coche) tienen el constructor estándar sin parámetros. | ||
- | |||
- | ---- | ||
- | |||
- | Hay que tener en cuenta que una subclase solo podrá acceder a los miembros de la superclase que sean '' | ||
- | |||
- | ==== Evitar la herencia ==== | ||
- | Si queremos que una clase no permita extender su funcionalidad, | ||
- | |||
- | <code java> | ||
- | public final class Vehiculo{ | ||
- | ... | ||
- | } | ||
- | </ | ||
- | |||
- | La palabra clave '' | ||
- | |||
- | Por ejemplo las clases '' | ||
- | ===== Constructor de la subclase ===== | ||
- | **Los constructores no se heredan**. __Siempre que se crea una instancia de una subclase, se crea primero una instancia de la superclase__. Esta instanciación puede ser implícita, o explícita, o lo que es lo mismo, invisible o visible. | ||
- | |||
- | En una clase se puede definir un constructor de forma explícita, o no definir ninguno. **Cuando no definimos un constructor, | ||
- | |||
- | Atendiendo a lo anterior, con los constructores de la subclase puede ocurrir 2 cosas: | ||
- | * **La superclase tiene un constructor sin parámetros** (ya sea el que define Java de forma implícita, o uno definido por nosotros que no tiene parámetros). En este caso en la subclase podemos definir un constructor, | ||
- | * **La superclase no tiene un constructor sin parámetros** (o sea, se ha definido uno con parámetros). En este caso Java no puede llamar de forma implícita al constructor de la superclase, ya que necesita saber qué valor dar a sus parámetros. Entonces estamos obligados a crear también un constructor en la subclase, cuya primera primera instrucción es una llamada al constructor de la superclase. Esto se hace usando la instrucción '' | ||
- | ==== Palabra clave super ==== | ||
- | Si en cualquier clase tenemos la palabra '' | ||
- | |||
- | Esto tiene su explicación, | ||
- | |||
- | A la hora de crear un constructor para la subclase, es necesario llamar al constructor de la superclase. Cuando el constructor/ | ||
- | |||
- | <code java> | ||
- | // | ||
- | public Vehiculo(int km, String matricula) { | ||
- | | ||
- | | ||
- | } | ||
- | ........ | ||
- | |||
- | // | ||
- | public Coche(int km, String matricula) { | ||
- | | ||
- | } | ||
- | |||
- | //Ó podemos tener también otro constructor en la subclase | ||
- | public Coche(int km, String matricula, int cilindrada) { | ||
- | | ||
- | | ||
- | } | ||
- | </ | ||
- | |||
- | Como vemos, si una clase hereda de otra, **y la superclase solo tiene constructores con argumentos, la subclase debe llamar a dicho constructor con al menos el mismo número de argumentos**, | ||
- | |||
- | Una vez vez que se crea el constructor de la superclase, podemos crear los constructores de la subclase. | ||
- | |||
- | **Si una superclase no tiene contructor no-args, la subclase debe tener al menos los mismos constructores, | ||
- | ===== Sobrescritura de métodos: Override ===== | ||
- | |||
- | ===== Modificador Protected ===== | ||
- | |||
- | ---- | ||
- | |||
- | (c) {{date> %Y}} Fernando Valdeón |
bloque4/herencia.1520234900.txt.gz · Última modificación: 16/09/2024 20:53 (editor externo)