在C#中,方法重写(Method Overriding)和方法覆盖(Method Hiding)是面向对象编程中的重要概念。它们允许子类对父类的方法进行修改、扩展或重新实现。
// 父类
public class Shape
{
public virtual void Draw()
{
Console.WriteLine("Drawing a shape.");
}
}
// 子类重写父类方法
public class Circle : Shape
{
public override void Draw()
{
Console.WriteLine("Drawing a circle.");
}
}
// 使用重写的方法
Shape shape = new Circle();
shape.Draw(); // 调用重写的子类方法
// 父类
public class Shape
{
public void Draw()
{
Console.WriteLine("Drawing a shape.");
}
}
// 子类覆盖父类方法
public class Circle : Shape
{
public new void Draw()
{
Console.WriteLine("Drawing a circle.");
}
}
// 使用覆盖的方法
Shape shape = new Circle();
shape.Draw(); // 调用覆盖的子类方法
// 父类
public class Shape
{
public virtual void Draw()
{
Console.WriteLine("Drawing a shape.");
}
}
// 子类重写父类方法并调用父类实现
public class Circle : Shape
{
public override void Draw()
{
// 调用父类的实现
base.Draw();
Console.WriteLine("Drawing a circle.");
}
}
// 使用重写并调用父类实现的方法
Shape shape = new Circle();
shape.Draw(); // 调用重写的子类方法和父类方法
// 父类
public abstract class Shape
{
public abstract void Draw(); // 抽象方法
public virtual void Rotate() // 虚方法
{
Console.WriteLine("Rotating the shape.");
}
}
// 子类重写抽象方法和虚方法
public class Circle : Shape
{
public override void Draw()
{
Console.WriteLine("Drawing a circle.");
}
public override void Rotate()
{
Console.WriteLine("Rotating the circle.");
}
}
// 使用重写的抽象方法和虚方法
Shape shape = new Circle();
shape.Draw(); // 调用重写的抽象方法
shape.Rotate(); // 调用重写的虚方法