基本继承(:)语法
本课属于 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# 只支持单继承,也就是说,一个类只能继承一个基类。不过,你可以构建继承链,让一个派生类成为另一个类的基类。这样就能创建一个层次结构来模拟现实世界中的关系,同时让代码保持井然有序且可重用。
挑战
简单我们来构建一个车辆继承体系,展示继承如何让派生类共享基类的功能,同时添加各自独有的行为。
你将创建 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()
}
}
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
面向对象编程中的所有课
自己练习: C# 在线编译器