El mecanismo de herencia es uno de los pilares fundamentales en los que se basa la programación orientada a objetos. Es un mecanismo que permite definir nuevas clases a partir de otras ya definidas de modo que si en la definición de una clase indicamos que ésta deriva de otra, entonces la primera -a la que se le suele llamar clase hija- será tratada por el compilador automáticamente como si su definición incluyese la definición de la segunda –a la que se le suele llamar clase padre o clase base.
Las clases que derivan de otras se definen usando la siguiente sintaxis:
class <nombreHija>:<nombrePadre>
{
<miembrosHija>
}
A los miembros definidos en <miembrosHijas> se le añadirán los que hubiésemos definido en la clase padre. Por ejemplo, a partir de la clase Persona puede crearse una clase Trabajador así:
class Trabajador:Persona
{
public int Sueldo;
public Trabajador (string nombre, int edad, string nif, int sueldo)
:base(nombre, edad, nif)
{
Sueldo = sueldo;
}
}
Los objetos de esta clase Trabajador contarán con los mismos miembros que los objetos Persona y además incorporarán un nuevo campo llamado Sueldo que almacenará el dinero que cada trabajador gane. Nótese además que a la hora de escribir el constructor de esta clase ha sido necesario escribirlo con una sintaxis especial consistente en preceder la llave de apertura del cuerpo del método de una estructura de la forma:
: base(<parametrosBase>)
A esta estructura se le llama inicializador base y se utiliza para indicar cómo deseamos inicializar los campos heredados de la clase padre. No es más que una llamada al constructor de la misma con los parámetros adecuados, y si no se incluye el compilador consideraría por defecto que vale :base(), lo que sería incorrecto en este ejemplo debido a que Persona carece de constructor sin parámetros.
Un ejemplo:
using System;
class Persona
{
// Campo de cada objeto Persona que almacena su nombre
public string Nombre;
// Campo de cada objeto Persona que almacena su edad
public int Edad;
// Campo de cada objeto Persona que almacena su NIF
public string NIF;
void Cumpleaños()
// Incrementa en uno de edad del objeto
Persona
{
Edad++;
}
// Constructor de Persona
public Persona(string
nombre, int edad, string
nif)
{
Nombre = nombre;
Edad
= edad;
NIF =
nif;
}
}
class Trabajador : Persona
{
// Campo de cada objeto Trabajador que almacena cuánto gana
public int Sueldo;
Trabajador(string nombre, int edad, string nif,
int sueldo)
: base(nombre, edad, nif)
{ // Inicializamos
cada Trabajador en base al constructor de Persona
Sueldo
= sueldo;
}
public static void Main()
{
Trabajador p = new
Trabajador("Josan",
22, "77588260-Z", 100000);
Console.WriteLine("Nombre="
+ p.Nombre);
Console.WriteLine("Edad=" + p.Edad);
Console.WriteLine("NIF=" + p.NIF);
Console.WriteLine("Sueldo="
+ p.Sueldo);
Console.ReadKey();
}
}
Gracias
ResponderEliminarGracias, está muy bien explicado!!
ResponderEliminarDebería usar protected cuando se trata de herencia, no cumples con la abstracción de objetos
ResponderEliminarexelente mucvhas graciAS
ResponderEliminarBest casino games? - Dr.MCD
ResponderEliminarTop 광명 출장마사지 5 casino games for 경산 출장마사지 real money · Blackjack · Roulette · Three Card Poker · 김해 출장안마 Video Poker 성남 출장마사지 · Let it Ride · Craps · 구미 출장샵 Jackpots