Una subclase puede sobreescribir completamente la implementaci�n de un m�todo heredado o puede mejorar el m�todo a�adiendole funcionalidad.
�Reemplazar la Implementaci�n de un M�todo de una Superclase
Algunas veces, una subclase querr�a reemplazar completamente la implementaci�n de un m�todo de su superclase. De hecho, muchas superclases proporcionan implementaciones de m�todos vac�as con la esperanza de que la mayor�a, si no todas, sus subclases reemplacen completamente la implementaci�n de ese m�todo.
Un ejemplo de esto es el m�todo run() de la clase Thread. La clase Thread proporciona una implementaci�n vac�a (el m�todo no hace nada) para el m�todo run(), porque por definici�n, este m�todo depende de la subclase. La clase Thread posiblemente no puede proporcionar una implementaci�n medianamente razonable del m�todo run().
Para reemplazar completamente la implementaci�n de un m�todo de la superclase, simplememte se llama a un m�todo con el mismo nombre que el del m�todo de la superclase y se sobreescribe el m�todo con la misma firma que la del m�todo sobreescrito.
class ThreadSegundoPlano extends Thread { void run() { . . . } }
La clase ThreadSegundoPlano sobreescribe completamente el m�todo run() de su superclase y reemplaza completamente su implementaci�n.
�A�adir Implementaci�n a un M�todo de la Superclase
Otras veces una subclase querr� mantener la implementaci�n del m�todo de su superclase y posteriormente ampliar alg�n comportamiento espec�fico de la subclase. Por ejemplo, los m�todos constructores de una subclase lo hacen normalmente--la subclase quiere preservar la inicializaci�n realizada por la superclase, pero proporciona inicializaci�n adicional espec�fica de la subclase.
Supongamos que queremos crear una subclase de la clase Windows del paquete java.awt. La clase Windows tiene un constructor que requiere un argumento del tipo Frame que es el padre de la ventana.
public Window(Frame parent)
Este constructor realiza alguna inicializaci�n en la ventana para que trabaje dentro del sistema de ventanas. Para asegurarnos de que una subclase de Windows tambi�n trabaja dentro del sistema de ventanas, deberemos proporcionar un constructor que realice la misma inicializaci�n.
Mucho mejor que intentar recrear el proceso de inicializaci�n que ocurre dentro del constructor de Windows, podr�amos utilizar lo que la clase Windows ya hace. Se puede utilizar el c�digo del constructor de Windows llam�mdolo desde dentro del constructor de la subclase Window.
class Ventana extends Window { public Ventana(Frame parent) { super(parent); . . . // Ventana especifica su inicializaci�n aqu� . . . } }
El constructor de Ventana llama primero al constructor de su superclase, y no hace nada m�s. T�picamente, este es el comportamiento deseado de los constructores--las superclases deben tener la oportunidad de realizar sus tareas de inicializaci�n antes que las de su subclase. Otros tipos de m�todos podr�an llamar al constructor de la supeclase al final del m�todo o en el medio.
�M�todos que una Subclase no Puede Sobreescibir
- Una subclase no puede sobreescribir m�todos que hayan sido declarados como final en la superclase (por definici�n, los m�todos finales no pueden ser sobreescritos). Si intentamos sobreescribir un m�todo final, el compilador mostrar� un mensaje similar a este y no compilar� el programa.
FinalTest.java:7: Final methods can't be overriden. Method void iamfinal() is final in class ClassWithFinalMethod. void iamfinal() { ^ 1 error
Para una explicaci�n sobre los m�todos finales, puedes ver: Escribir M�todos y Clases Finales.
- Una subclase tampoco puede sobreescribir m�todos que se hayan declarado como static en la superclase. En otras palabras, una subclase no puede sobreescribir un m�todo de clase. Puedes ver Miembros del Ejemplar y de la Clase para obtener una explicaci�n sobre los m�todos de clase.
�M�todos que una Subclase debe Sobreescribir
Las subclases deben sobreescribir aquellos m�todos que hayan sido declarados como abstract en la superclase, o la propia subclase debe ser abstracta. Escribir Clases y M�todos Abstractos explica con m�s detalle los m�todos y clases abstractos.