Herencia
Explicación de la implementación de la herencia.
Last updated
Explicación de la implementación de la herencia.
Last updated
Para explicar este concepto vamos a extender un poco la clase Slime antes de empezar:
El problema que tenemos que solucionar actualmente es que tenemos Slimes de varios colores. Cada color de Slime tiene su propio tipo y por tanto sus ataques serán diferentes así como sus métodos.
Por ejemplo, el slime azul será de tipo agua y podrá mantener la respiración bajo el agua más que el resto. El rojo, de tipo fuego, tendrá resistencia a altas temperaturas. Sin embargo, todos ellos comparten todas las propiedades de la clase Slime.
La clase Slime
en este caso se convertirá en la clase Padre o Superclase de las clases específicas de SlimeAgua
o SlimeFuego
.
La clase Any es la raíz de la jerarquía de clases en Kotlin. Esto significa que cualquier clase que no herede explícitamente de otra superclase, lo hará implícitamente de la clase Any.
equals()
: Indica si otro objeto es igual al actual.
hashCode()
: Retorna el código hash asociado al objeto.
toString()
: Retorna la representación en String
del objeto.
La sintaxis para aplicar la herencia es muy sencilla en Kotlin:
Las clases por defecto tienen el modificador final
, lo que significa que son el útimo eslabón de su arbol genealógico. Para que se pueda heredar de la clase Padre, hay que añadir a su cabecera el modificador open
.
En el caso de que haya un constructor primario en la clase padre, habrá que inicializarlo en la clase descendiente:
Si la clase padre no tiene constructor primario o deseas realizar la llamada del mismo, desde un constructor secundario de la subclase, entonces usa la palabra reservada constructor
junto a la palabra reservada super
para la llamada.
La sintaxis de aplicación de la herencia es la siguiente:
Como puede ver, los argumentos que se le pasan a la clase SlimeAgua
pero pertenecen a la clase Slime
, no se inicializan con val o var.
lungs
tampoco se inicializa con val o var por que no es un atributo, sino que se utiliza para inicializar el atributo waterResistance
.
La clase SlimeAgua
luego llama al constructor de la clase Slime
de la que hereda para que se cree una instancia de la misma y poder crearse a partir de esa una instancia de la clase SlimeAgua
.
Después nos encontramos con las propiedades que son exclusivas de la clase SlimeAgua
. Tanto atributos como métodos pueden ser específicos.
Ahora si que podemos hacer un objeto azulito como dios manda:
Se ve en el ejemplo anterior que azulito tiene acceso a todos los miembros de Slime
así como a las propiedades específicas de SlimeAgua
.
Las clases específicas SlimeAgua
y SlimeFuego
compartirán las propiedades de la clase padre Slime
y además podrán tener las suyas particulares. Esto es lo que conocemos como .
Esta clase Any tiene tres métodos según su implementación en :