Esta técnica consiste en la capacidad de crear, en una clase derivada, un método que altere parcial o
totalmente, la implementación ya existente de dicho método en la clase base. Una de las diferencias
existentes con la sobrecarga de métodos, estriba en que al sobrescribir, el método en la subclase puede
tener el mismo nombre y lista de parámetros que el ya existente en la clase padre. Podemos
sobrescribir tanto métodos como propiedades.
Para indicar en la clase base que un método podrá ser sobrescrito en una subclase, debemos declarar
dicho método utilizando la palabra clave Overridable. Posteriormente, cuando en una clase derivada
queramos rescribir el método de la clase base, lo declararemos empleando la palabra clave Overrides.
Podemos deducir por lo tanto, que la reescritura de métodos es un proceso que se debe realizar con el
consentimiento previo de la clase base.
El Código fuente 267 muestra un ejemplo del uso de este tipo de métodos. En él creamos las ya
conocidas clase base Empleado y subclase Administrativo, y en ambas escribimos el método
VerDatos( ), con la particularidad de que en la clase hija, cambiamos totalmente su implementación.
Module Module1
Sub Main()
Dim loEmp As New Empleado()
loEmp.piID = 50
loEmp.Nombre = "juan casas"
loEmp.VerDatos()
Console.WriteLine()
Dim loAdmin As New Administrativo()
loAdmin.piID = 129
loAdmin.Nombre = "elena redondo"
loAdmin.VerDatos()
Console.ReadLine()
End Sub
End Module
Public Class Empleado
Public piID As Integer
Private msNombre As String
Public Property Nombre() As String
Get
Return msNombre
End Get
Set(ByVal Value As String)
msNombre = Value
End Set
End Property
' marcamos el método como rescribible con Overridable
Public Overridable Sub VerDatos()
Console.WriteLine("Datos del empleado: {0}-{1}", _
Me.piID, Me.Nombre)
End Sub
End Class
Public Class Administrativo : Inherits Empleado
' rescribimos este método totalmente usando Overrides
Public Overrides Sub VerDatos()
Console.WriteLine("Datos del empleado")
Console.WriteLine("==================")
Console.WriteLine("Código: {0}", Me.piID)
Console.WriteLine("Nombre: {0}", UCase(Me.Nombre))
End Sub
End Class
Código fuente 267
Pero, ¿qué sucede si queremos utilizar la implementación del método base en la clase derivada?, pues
sólo necesitamos llamar al método de la clase padre usando la palabra clave MyBase.
No hay comentarios:
Publicar un comentario