Una de las herramientas que más utilizamos es la herencia, donde adquirimos todas las propiedades y métodos de una clase superior, pero que pasa cuando un método de esta clase de la que heredamos no cumple con lo que deseamos, pues aquí entra en juego lo que llamamos la sobrescritura de métodos.
Sobrescribir un Método
Esto sucede cuando una subclase debe cambiar la forma en la que un método de su clase padre ha sido implementado, ya sea agregar algún detalle adicional o simplemente cambiar totalmente el método, esta acción no tiene restricciones, aunque a nivel de pensamiento la idea es que el método sobrescrito haga o cumpla con la misma temática del método original, por ejemplo si tenemos un método que se llama imprimirAtributos(); y su función sea imprimir algunos atributos de un objeto, si lo sobrescribimos no deberíamos hacer que saque un cálculo de un crédito, más bien si sufre alguna sobrescritura es porque estamos cambiando los atributos que debe imprimir o agregando los atributos específicos de la subclase.
Algunas cosas a tener en cuenta cuando sobrescribimos un método son las siguientes:
- Un método solo puede ser sobrescrito si es accesible, de esta forma un método privado no puede ser sobrescrito ya que no puede ser accedido fuera de su propia clase, por ello si un método privado se sobrescribe en la clase hija, realmente el nuevo método no tiene nada que ver con el de la superclase.
- Un método estático tampoco puede ser sobrescrito, por ello si volvemos a definir un método estático en nuestra clase hija el método de la clase padre es ocultado para su utilización y la única forma de acceder a él es llamándolo directamente con el nombre de la clase padre, por ejemplo: Persona.métodoEstatico()
¿Cómo Sobrescribir un Método?
Ya que sabemos la base teórica veamos cómo se realiza la sobrescritura de un método. Supongamos que tenemos esta clase padre:
Como podemos notar contamos con un atributo color y un método que imprime los atributos, ahora veamos cómo queda una clase hija que sobrescribe el método:
Aquí vemos que hemos re-definido el método para que imprima una línea adicional y nos muestre el radio, como la información del primer método nos sirve, hemos decidido llamarlo utilizando la palabra super, así nuestro método sabe que debe invocar al método de su clase padre y cuando creemos una instancia de la clase esta llamará al método de su clase Circulo que ha sido sobrescrito.