Ejemplo de interfaz animal en java
A estas alturas deberías estar bastante familiarizado con la creación de clases que contienen variables y funciones. Debes entender que diferentes instancias de la misma clase contienen los mismos tipos de variables y funciones, pero esas instancias pueden tener diferentes valores para esas variables y hacer diferentes cosas basadas en esos valores. Aquí hay un ejemplo:
Este código define una clase llamada Animal. Esta clase contiene una variable de nombre, una función que establece el valor de esa variable y una función que lo imprime. La función main() crea dos instancias de la clase Animal, establece el nombre de cada una y le dice a cada instancia que imprima su nombre. Cada instancia tiene su propio valor para la variable nombre, por lo que ambos nombres se imprimen.
Este tutorial introduce la herencia, que permite organizar los datos y el código en jerarquías más avanzadas. La herencia es un elemento básico de casi todas las bibliotecas y marcos de trabajo de Java, por lo que es un concepto importante que hay que entender.
Podríamos pensar en modificar la clase Animal directamente, pero eso no siempre es una opción: tal vez no tenemos control sobre esta clase porque viene de una biblioteca, o del código de otra persona. Tampoco queremos cambiar el código existente que ya utiliza esta clase. En su lugar, podemos extender la clase Animal en otra clase sobre la que sí tengamos control.
Clase infantil Java
En el último capítulo, aprendimos sobre la herencia. En este capítulo, veremos el método overriding que se utiliza a menudo cuando se trata de la herencia.Piensa en un caso en el que la clase padre y la clase hija tienen métodos con el mismo nombre, digamos display. Esta característica se denomina sobreescritura de métodos. Supongamos que creamos una clase llamada Animal con un método llamado printSound() que imprime el sonido de un animal. El perro, el gato y el cerdo son diferentes tipos de animales, por lo que creamos tres subclases llamadas Perro, Gato y Cerdo de la clase Animal.Dado que diferentes animales hacen diferentes sonidos, podemos crear diferentes métodos para devolver el sonido en las clases Perro, Gato y Cerdo como se muestra a continuación.
Aquí, hemos definido diferentes métodos para imprimir el sonido en diferentes clases. Por lo tanto, tendremos que recordar los nombres de los diferentes métodos para imprimir los diferentes sonidos de los animales. Por ejemplo, el objeto de la clase Gato llamará al método llamado printCatSound() para imprimir el sonido de un gato y el objeto de la clase Cerdo llamará al método llamado getPigArea() para imprimir el sonido de un cerdo.
Ejemplo de jerarquía de clases de animales en Java
Hay dos maneras de reutilizar las clases existentes, a saber, la composición y la herencia. Con la composición (también conocida como agregación), se define una nueva clase, que se compone de clases existentes. Con la herencia, se deriva una nueva clase basada en una clase existente, con modificaciones o extensiones.
Supongamos que necesitamos una nueva clase llamada Línea, podemos diseñar la clase Línea reutilizando la clase Punto mediante la composición. Decimos que “Una línea está compuesta por dos puntos”, o “Una línea tiene dos puntos”. La composición muestra una relación “tiene-un”.
En POO, a menudo organizamos las clases en jerarquía para evitar la duplicación y reducir la redundancia. Las clases de la jerarquía inferior heredan todas las variables (atributos estáticos) y métodos (comportamientos dinámicos) de las jerarquías superiores. Una clase en la jerarquía inferior se llama subclase (o clase derivada, hija, extendida). Una clase de la jerarquía superior se llama superclase (o clase base, padre). Al extraer todas las variables y métodos comunes en las superclases, y dejar las variables y métodos especializados en las subclases, se puede reducir o eliminar en gran medida la redundancia, ya que estas variables y métodos comunes no necesitan repetirse en todas las subclases. Por ejemplo,
Ejemplo de clase Java padre-hijo
La herencia puede definirse como el proceso por el que una clase adquiere las propiedades (métodos y campos) de otra. Con el uso de la herencia la información se hace manejable en un orden jerárquico.
En el programa dado, cuando se crea un objeto de la clase Mi_Cálculo, se hace una copia del contenido de la superclase dentro de él. Por eso, utilizando el objeto de la subclase se puede acceder a los miembros de la superclase.
La variable de referencia de la superclase puede contener el objeto de la subclase, pero utilizando esa variable sólo se puede acceder a los miembros de la superclase, por lo que para acceder a los miembros de ambas clases se recomienda crear siempre una variable de referencia a la subclase.
Si consideras el programa anterior, puedes instanciar la clase como se indica a continuación. Pero utilizando la variable de referencia de la superclase ( cal en este caso) no se puede llamar al método multiplicación(), que pertenece a la subclase Mi_Cálculo.
Nota – Una subclase hereda todos los miembros (campos, métodos y clases anidadas) de su superclase. Los constructores no son miembros, por lo que no son heredados por las subclases, pero el constructor de la superclase puede ser invocado desde la subclase.