Herramientas de usuario

Herramientas del sitio


bloque3:herencia

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
bloque3:herencia [14/02/2023 02:28] – [Etiqueta @Override] Fernando Valdeónbloque3:herencia [16/09/2024 20:53] (actual) – editor externo 127.0.0.1
Línea 13: Línea 13:
  
 Podríamos decir que la herencia nos permite usar el código creado 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. Podríamos decir que la herencia nos permite usar el código creado 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.
 +
 +Otro planteamiento seria, si me encuentro con la necesidad de tener dos clases cuyas operaciones (métodos) son iguales, pero que cada una tiene otras operaciones propias diferentes, debo concluir que esas dos clases tienen un parte en común, la cual debería definirse en una superclase, permitiendo a estas subclases implementar solo las operaciones específicas de cada una.
 ===== Declaración de una Subclase ===== ===== Declaración de una Subclase =====
-Si entendemos que una clase son “los planos” que definen la creación de un ejemplar (objeto, instancia) 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 las que tenía.+Si entendemos que una clase son “los planos” que definen la creación de un ejemplar (objeto, instancia) 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 de las que tenía.
  
 Podemos llamar a las clases hijas ''subclases'' y a la clase padre, ''superclase''. Podemos llamar a las clases hijas ''subclases'' y a la clase padre, ''superclase''.
-Para que una subclase herede de una superclase debe usarse ''extends'' al definir la clase.+Para que una subclase herede de una superclase debe usarse ''extends'' en la definición de la subclase.
  
 Ejemplo de superclase: ''Vehiculo''. Hay muchos tipos de vehículos (avión, moto agua, coche, moto). Es una clase estándar como cualquier otra. Ejemplo de superclase: ''Vehiculo''. Hay muchos tipos de vehículos (avión, moto agua, coche, moto). Es una clase estándar como cualquier otra.
Línea 70: Línea 72:
 } }
 </code> </code>
 +
  
 {{:bloque3:cocheherencia.png?400 |}} {{:bloque3:cocheherencia.png?400 |}}
 +
 Aquí vemos como aparecen los métodos heredados de la superclase Vehiculo: ''getKm()'', ''setKm()'', ''getMatricula()'' y ''setMatricula()''. Aquí vemos como aparecen los métodos heredados de la superclase Vehiculo: ''getKm()'', ''setKm()'', ''getMatricula()'' y ''setMatricula()''.
  
Línea 97: Línea 101:
 Por ejemplo las clases ''String'' o ''Math'' no se pueden heredar, ya que están definidas como ''final''. Por ejemplo las clases ''String'' o ''Math'' no se pueden heredar, ya que están definidas como ''final''.
 ===== Constructor de la subclase ===== ===== 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.+**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 a nivel de código, o visible.
  
 En una clase se puede definir un constructor de forma explícita, o no definir ninguno. **Cuando no definimos un constructor, Java crea implícitamente uno**. No tiene parámetros, y no hace nada, pero sirve para crear instancias de la clase. Se conoce como constructor **no-args**, sin argumentos (parámetros). En una clase se puede definir un constructor de forma explícita, o no definir ninguno. **Cuando no definimos un constructor, Java crea implícitamente uno**. No tiene parámetros, y no hace nada, pero sirve para crear instancias de la clase. Se conoce como constructor **no-args**, sin argumentos (parámetros).
  
 Atendiendo a lo anterior, con los constructores de la subclase puede ocurrir 2 cosas: 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, o no definir ninguno (Java crea un constructor **no-args** implícitamente). Cada vez que creemos una instancia de la subclase, Java llamará automáticamente al constructor de la superclase de forma implícita, invisible.+  * **La superclase tiene un constructor sin parámetros** (ya sea el que define Java de forma implícita cuando no hemos definido ninguno, o uno definido por nosotros que no tiene parámetros). En este caso en la subclase podemos definir un constructor, o no definir ninguno (Java crea un constructor **no-args** implícitamente). Cada vez que creemos una instancia de la subclase, Java llamará automáticamente al constructor de la superclase de forma implícita, invisible.
   * **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 instrucción es una llamada al constructor de la superclase. Esto se hace usando la instrucción ''super()''.   * **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 instrucción es una llamada al constructor de la superclase. Esto se hace usando la instrucción ''super()''.
 ==== Palabra clave super ==== ==== Palabra clave super ====
bloque3/herencia.1676341726.txt.gz · Última modificación: 16/09/2024 20:53 (editor externo)