Menu
CoddyTech

基本继承(:)语法

本课属于 Coddy C# 学习旅程的“面向对象编程”单元。第 19 课,共 70 课。

继承允许一个类获取另一个类的属性和方法。你不必重写相同的代码,而是创建一个包含共享功能的基类(父类),然后创建从它继承的派生类(子类)。

在 C# 中,你使用冒号 : 符号来表示继承:

public class Animal
{
    public string Name { get; set; }
    
    public void Eat()
    {
        Console.WriteLine($"{Name} is eating.");
    }
}

public class Dog : Animal
{
    public void Bark()
    {
        Console.WriteLine($"{Name} says Woof!");
    }
}

Dog 类继承了 Animal 的所有内容。它可以访问 Name 属性和 Eat() 方法,无需再次声明它们,还添加了自己的 Bark() 方法:

Dog myDog = new Dog();
myDog.Name = "Buddy";
myDog.Eat();   // 输出:Buddy is eating.
myDog.Bark();  // 输出:Buddy says Woof!

C# 只支持单继承,也就是说,一个类只能继承一个基类。不过,你可以构建继承链,让一个派生类成为另一个类的基类。这样就能创建一个层次结构来模拟现实世界中的关系,同时让代码保持井然有序且可重用。

challenge icon

挑战

简单

我们来构建一个车辆继承体系,展示继承如何让派生类共享基类的功能,同时添加各自独有的行为。

你将创建 3 个文件来组织代码:

  • Vehicle.cs:在 Transport 命名空间中定义一个 Vehicle 类。它将作为所有车辆共用的基类。它应包含一个 Brand 属性(string)和一个 Year 属性(int),以及一个用于打印 "{Brand} engine started." 的方法 StartEngine()。
  • Car.cs:在 Transport 命名空间中定义一个继承自 Vehicle 的 Car 类。这个类会添加自己的属性 NumberOfDoors(int)和一个用于打印 "{Brand} goes Beep Beep!" 的方法 Honk()。
  • Program.cs:在主文件中,使用输入值创建一个 Car 对象。设置它的属性(包括继承来的属性),然后展示汽车如何使用自己的方法,以及从 Vehicle 继承的方法。

你将收到 3 个输入:

  • 品牌名称
  • 年份
  • 车门数量

按以下格式打印汽车信息并展示它的功能:

Car: {Brand} ({Year})
Doors: {NumberOfDoors}
{StartEngine output}
{Honk output}

例如,如果输入是 Toyota、2022 和 4,输出应为:

Car: Toyota (2022)
Doors: 4
Toyota engine started.
Toyota goes Beep Beep!

注意,即使 Brand 属性和 StartEngine() 方法是在 Vehicle 中定义的,你的 Car 也可以访问它们。这就是继承的强大之处:派生类会自动获得基类中的所有内容!

亲手试试

using System;
using Transport;

class Program
{
    public static void Main(string[] args)
    {
        // 读取输入
        string brand = Console.ReadLine();
        int year = Convert.ToInt32(Console.ReadLine());
        int doors = Convert.ToInt32(Console.ReadLine());
        
        // TODO: 创建一个 Car 实例
        
        // TODO: 设置汽车的属性(Brand、Year、NumberOfDoors)
        
        // TODO: 按要求的格式输出汽车的信息:
        // Car: {Brand} ({Year})
        // Doors: {NumberOfDoors}
        // 然后调用 StartEngine() 和 Honk()
    }
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

面向对象编程中的所有课

自己练习: C# 在线编译器