Sobrescritura — RexDac Academy

RexDac AcademyNotas técnicas · Ayuda tener algunos conocimientos previos
0%Notas publicadas leídas · en este dispositivo

Nivel 5 — Herencia

Sobrescritura

Notas originales de SunDiaL · Ver fuente en inglés

La sobrescritura solo se aplica a métodos y propiedades. Se utilizan cuatro palabras clave para la sobrescritura. Las tres primeras son la forma más habitual de sobrescribir comportamientos. Los miembros sobrescritos deben tener el mismo tipo de retorno, firma y parámetros.

abstract

No tiene implementación y obliga a sobrescribirlo.

Si una clase tiene al menos un miembro abstracto, también debe marcarse como abstracta, lo que impide instanciarla.

Una clase abstracta que no tiene ningún método implementado se denomina a veces clase «puramente» abstracta.

virtual

Tiene implementación; sobrescribirlo es opcional.

override

Indica una sobrescritura.

Además de this, puede utilizarse la palabra clave base para acceder a los miembros de la clase base.

new

Oculta un miembro de la clase padre detrás de otro.

Aunque es similar, esta palabra clave no realiza exactamente una sobrescritura. Oculta el miembro de la clase padre detrás de otro con el mismo nombre. Sin embargo, el tipo de retorno o los parámetros pueden ser diferentes.

Ejemplo

public class Shape
{
	public abstract int Area()
}

public class Square : Shape
{
	public int Length { get; set; }
	
	public Square(int length)
	{
		this.Length = length
	}
		
	public override int Area()
	{
		return Length * Length;
	}
}

public class Cube : Square
{
	public Cube(int length) : base(length)
	{
		
	}
	
	public override int Area()
	{
		return base.Area() * 6;
	}
}

public class Circle : Shape
{
	public Circle(int radius)
	{
		this.Radius = radius;
	}
	public int Radius { get; set; }
	
	public override int Area()
	{
		return 3.14*Radius*Radius;
	}
}

public void Main()
{
	List<Shape> shapes = new List<Shape>();
	shapes.Add(new Square(3));
	shapes.Add(new Circle(5));
	foreach(Shape shape in shapes)
	{
		Console.WriteLine(shape.Area());
	}
}