基本概念
继承是面向对象编程的一种重要机制,它允许一个类(称为子类或派生类)从另一个类(称为父类或基类)继承属性和方法。通过继承,子类可以复用父类的代码,并且可以扩展或重写父类的功能。
用途
代码重用:通过继承,子类可以复用父类的代码,减少代码重复。
代码扩展:子类可以扩展父类的功能,添加新的属性和方法。
代码维护:通过继承,可以创建层次化的类结构,使代码更易于维护和扩展。
在游戏开发中,继承广泛用于创建不同类型的游戏对象。例如,可以创建一个 Character
基类,然后创建 Player
和 Enemy
子类,从而复用和扩展 Character
的功能。
语法规则
使用
:
符号表示继承关系。子类可以覆盖父类的方法,使用
override
关键字。
public class ParentClass
{
public void ParentMethod()
{
Console.WriteLine("This is a parent method.");
}
}
public class ChildClass : ParentClass
{
public void ChildMethod()
{
Console.WriteLine("This is a child method.");
}
}
示例代码
简单继承
public class Animal
{
public string Name { get; set; }
public void MakeSound()
{
Console.WriteLine("Animal sound");
}
}
public class Dog : Animal
{
public void Bark()
{
Console.WriteLine("Woof!");
}
}
public class Program
{
public static void Main()
{
Dog myDog = new Dog();
myDog.Name = "Buddy";
myDog.MakeSound(); // 继承自 Animal 类
myDog.Bark(); // Dog 类的方法
Console.WriteLine($"Dog's name: {myDog.Name}");
}
}
重写方法
public class Animal
{
public string Name { get; set; }
public virtual void MakeSound()
{
Console.WriteLine("Animal sound");
}
}
public class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine("Woof!");
}
}
public class Program
{
public static void Main()
{
Animal myAnimal = new Animal();
myAnimal.MakeSound(); // 输出 "Animal sound"
Dog myDog = new Dog();
myDog.MakeSound(); // 输出 "Woof!"
}
}
优点和缺点
优点
代码重用:通过继承,子类可以复用父类的代码,减少代码重复。
代码扩展:子类可以扩展父类的功能,添加新的属性和方法。
层次结构:通过继承,可以创建层次化的类结构,使代码更易于理解和维护。
缺点
耦合度高:子类依赖于父类,修改父类可能会影响子类的行为。
灵活性差:继承是静态的,子类与父类的关系在编译时确定,灵活性不如组合。
多重继承问题:C# 不支持多重继承(一个类只能有一个直接父类),这可能会限制某些设计。
基础练习题
创建一个
Vehicle
类,包含Speed
属性和Drive
方法。然后创建Car
和Bike
子类,从Vehicle
类继承,并添加各自的属性和方法。创建Program
类,在Main
方法中实例化Car
和Bike
对象,并调用它们的方法。创建一个
Person
类,包含FirstName
和LastName
属性,以及GetFullName
方法。然后创建Student
子类,从Person
类继承,并添加Grade
属性。创建Program
类,在Main
方法中实例化Student
对象,并调用它的方法。
进阶练习题
创建一个
Shape
抽象类,包含Area
和Perimeter
抽象方法。然后创建Circle
和Rectangle
子类,分别实现Area
和Perimeter
方法。创建Program
类,在Main
方法中实例化Circle
和Rectangle
对象,并计算它们的面积和周长。创建一个
Employee
类,包含Name
和Salary
属性,以及GetDetails
方法。然后创建Manager
和Developer
子类,从Employee
类继承,并分别添加Department
和ProgrammingLanguage
属性。创建Program
类,在Main
方法中实例化Manager
和Developer
对象,并调用它们的方法。