C# 编程指南:方法重写(Method Overriding)和方法覆盖(Method Hiding)

在C#中,方法重写(Method Overriding)和方法覆盖(Method Hiding)是面向对象编程中的重要概念。它们允许子类对父类的方法进行修改、扩展或重新实现。

部分
1
方法重写(Method Overriding)
方法重写是指子类定义一个与父类方法具有相同名称、参数列表和返回类型的方法。
子类可以通过重写方法来修改或扩展父类方法的实现。
使用 override 关键字标记子类中要重写的方法。
// 父类
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(); // 调用重写的子类方法
部分
2
方法覆盖(Method Hiding)
方法覆盖是指子类定义一个与父类方法具有相同名称的方法,但没有使用 override 关键字。
子类的方法覆盖了父类的方法,但没有改变父类的行为。
使用 new 关键字标记子类中要覆盖的方法。
// 父类
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(); // 调用覆盖的子类方法
部分
3
使用 base 关键字
在子类中可以使用 base 关键字来调用父类中被重写或被覆盖的方法。
使用 base 关键字可以在子类的方法中调用父类的实现。
// 父类
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(); // 调用重写的子类方法和父类方法
部分
4
抽象方法和虚方法
抽象方法和虚方法是用于方法重写和覆盖的关键。
抽象方法(abstract)是在父类中声明但没有实现的方法,要求子类必须重写该方法。
虚方法(virtual)是在父类中声明并有默认实现的方法,子类可以选择性地重写该方法。
// 父类
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(); // 调用重写的虚方法
    目录

  • 1.
    方法重写(Method Overriding)
  • 2.
    方法覆盖(Method Hiding)
  • 3.
    使用 base 关键字
  • 4.
    抽象方法和虚方法