keywords: 继承, C# 继承, 基类和派生类, 方法重写, base 关键字
继承是面向对象编程(OOP)的一个核心概念,它允许我们创建一个基类,并让其他类从这个基类继承,从而共享其方法和属性。这不仅提高了代码的重用性,还促进了代码的组织和维护。
8.1 什么是继承
继承是一种机制,它允许一个类(派生类)从另一个类(基类)继承字段和方法。通过这种方式,派生类可以重用基类的代码,并且可以根据需要添加新的功能或重写现有功能。
8.2 基类和派生类
基类是其他类可以继承的类,它包含了通用的属性和方法。派生类是继承自基类的类,它继承了基类的所有属性和方法,并且可以增加自己的属性和方法。
classDiagram
Animal <|-- Cat
Animal <|-- Dog
class Animal {
+string Name
+Eat()
+Sleep()
}
class Cat {
+Meow()
}
class Dog {
+Bark()
}
在上面的类图中,Animal
是一个基类,Cat
和Dog
分别是从Animal
继承的派生类。Cat
类有一个独特的方法Meow()
,而Dog
类有一个独特的方法Bark()
。
示例代码
public class Animal
{
public string Name { get; set; }
public void Eat()
{
Console.WriteLine($"{Name} is eating.");
}
public void Sleep()
{
Console.WriteLine($"{Name} is sleeping.");
}
}
public class Cat : Animal
{
public void Meow()
{
Console.WriteLine("Cat says: Meow!");
}
}
public class Dog : Animal
{
public void Bark()
{
Console.WriteLine("Dog says: Bark!");
}
}
在这个代码示例中,Cat
和Dog
类都继承了Animal
类的Name
属性、Eat
方法和Sleep
方法。
8.3 继承的实现
要实现继承,只需使用冒号(:)符号在派生类声明中指定基类。
示例代码
public class Animal
{
public string Name { get; set; }
public void Eat()
{
Console.WriteLine($"{Name} is eating.");
}
public void Sleep()
{
Console.WriteLine($"{Name} is sleeping.");
}
}
public class Cat : Animal
{
public void Meow()
{
Console.WriteLine("Cat says: Meow!");
}
}
在这个示例中,Cat
类使用冒号(:)继承了Animal
类。
8.4 base 关键字
在派生类中,有时需要调用基类的构造函数或方法,这可以通过base
关键字来实现。
示例代码
public class Animal
{
public string Name { get; set; }
public Animal(string name)
{
Name = name;
}
public void Eat()
{
Console.WriteLine($"{Name} is eating.");
}
public void Sleep()
{
Console.WriteLine($"{Name} is sleeping.");
}
}
public class Cat : Animal
{
public Cat(string name) : base(name)
{
}
public void Meow()
{
Console.WriteLine("Cat says: Meow!");
}
}
在这个示例中,Cat
类的构造函数使用base
关键字调用了基类Animal
的构造函数。
8.5 方法的重写
方法重写允许派生类重新定义基类中的方法,从而提供新的实现。这需要在基类的方法前添加virtual
关键字,并在派生类的方法前添加override
关键字。
示例代码
public class Animal
{
public string Name { get; set; }
public virtual void Eat()
{
Console.WriteLine($"{Name} is eating.");
}
public void Sleep()
{
Console.WriteLine($"{Name} is sleeping.");
}
}
public class Cat : Animal
{
public override void Eat()
{
Console.WriteLine($"{Name} is eating cat food.");
}
public void Meow()
{
Console.WriteLine("Cat says: Meow!");
}
}
在这个示例中,Cat
类重写了Animal
类的Eat
方法,以提供不同的实现。
通过继承,代码得以重用和组织,更容易管理。理解和使用继承是掌握面向对象编程的重要一步。在下一章,我们将探讨多态,这是 OOP 的另一个关键概念。