C# 一分钟浅谈:继承与多态性的实践
创作时间:
作者:
@小白创作中心
C# 一分钟浅谈:继承与多态性的实践
引用
1
来源
1.
https://developer.aliyun.com/article/1603623
在面向对象编程中,继承和多态性是非常重要的概念。本文将从基础入手,逐步深入地介绍这两个概念,并通过具体的代码示例来帮助大家更好地理解和应用。
1. 继承的概念
什么是继承?
继承是一种使一个类(子类)继承另一个类(父类)的特性和行为的机制。子类可以重用父类中的方法和属性,并且还可以添加新的方法和属性或者覆盖父类的方法。
示例代码
假设我们有一个 Animal 类,表示所有动物的基本特性。
public class Animal
{
public string Name {
get; set; }
public int Age {
get; set; }
public virtual void MakeSound()
{
Console.WriteLine("Some sound");
}
}
现在我们可以创建一个新的 Dog 类,继承自 Animal 类。
public class Dog : Animal
{
public void Bark()
{
Console.WriteLine("Woof woof!");
}
public override void MakeSound()
{
Console.WriteLine("Bark bark!");
}
}
在这个例子中,Dog 类继承了 Animal 类的所有属性和方法,并且新增了一个 Bark 方法,同时覆盖了 MakeSound 方法。
创建对象
Dog dog = new Dog();
dog.Name = "Buddy";
dog.Age = 5;
dog.MakeSound(); // 输出: Bark bark!
dog.Bark(); // 输出: Woof woof!
2. 多态性的概念
什么是多态性?
多态性是指允许不同类的对象对同一消息作出响应的能力。简单来说,就是同一个方法可以根据不同的对象表现出不同的行为。
示例代码
我们可以创建一个新的 Cat 类,也继承自 Animal 类。
public class Cat : Animal
{
public void Meow()
{
Console.WriteLine("Meow meow!");
}
public override void MakeSound()
{
Console.WriteLine("Meow meow!");
}
}
现在我们可以创建一个 Animal 类型的数组,并存储不同类型的动物对象。
Animal[] animals = new Animal[]
{
new Dog(),
new Cat()
};
foreach (var animal in animals)
{
animal.MakeSound(); // 输出: Bark bark! 和 Meow meow!
}
在这个例子中,虽然 animals 数组的元素都是 Animal 类型,但实际上它们可以存储任何继承自 Animal 的子类对象。当调用 MakeSound 方法时,实际执行的是子类的方法。
3. 常见问题与易错点
常见问题
- 过度继承:过度使用继承可能导致类层次结构过于复杂,难以维护。
- 方法覆盖不当:覆盖方法时,如果没有正确处理基类的方法,可能导致程序行为不符合预期。
- 类型转换错误:在运行时进行类型转换时,如果对象的实际类型与期望类型不一致,会导致运行时错误。
如何避免
- 合理设计类层次结构:尽量减少不必要的继承层次,保持类结构清晰。
- 正确使用
override和virtual关键字:确保覆盖方法时正确使用override和virtual关键字。 - 使用
is操作符进行类型检查:在进行类型转换前,先使用is操作符检查对象的实际类型。
示例代码
Animal animal = new Dog();
if (animal is Dog)
{
((Dog)animal).Bark(); // 输出: Woof woof!
}
else if (animal is Cat)
{
((Cat)animal).Meow(); // 输出: Meow meow!
}
在这个例子中,我们首先检查 animal 是否是 Dog 类型,如果是,则调用 Bark 方法;如果不是,则检查是否是 Cat 类型,如果是,则调用 Meow 方法。
4. 总结
通过本文的学习,相信你对 C# 中的继承和多态性有了更清晰的认识。继承使得子类可以继承父类的特性和行为,而多态性则使得同一个方法可以根据不同的对象表现出不同的行为。理解并熟练运用这两个概念,对于编写高质量的面向对象程序至关重要。希望本文能为你今后的学习之路打下坚实的基础!
热门推荐
上海三甲医院牙科价目表:这几家收费合理且技术过硬
如何理解杠杆工具在投资中的应用?杠杆工具的风险管理有哪些策略?
水果榨汁会破坏营养吗?医生为你详细解答
如何在公务员论坛上获取考试资料?
美国未来几十年或现上万“鬼城”,死亡人数多于出生人口
DeepSeek大模型深度解析:架构、技术与应用全景
祥子的悲剧:一个关于希望与绝望的寓言
项目时间节点如何管理
海南骑楼文化深度解读:历史、特色与旅游指南
上海金陵东路骑楼:独特建筑风貌与历史演变
喝下去的水,要多久变成尿?终于明白为何有人一喝水就想去厕所了
肩关节运动的康复疗法是什么
基于开局观察的上海经济增长未来走势研判——2024年一季度上海经济形势分析报告
股票市场波动调节机制是什么
宝可梦火系克制关系(宝可梦火系优势解析:最强克制一览)
作息时间不规律导致失眠怎么办
人力资源和社会保障部职业技能鉴定中心的证书有效期是多久?
三角肌:肩部运动的关键肌肉,损伤怎么办?
普通话考试中常见的错误类型,仔细阅读避免再次失分
从赛场到医疗:NBA球员赛后冰敷背后的科学与保护膝盖的重要性
科普|麻醉的前世今生
2025年锰硅市场现状分析:供大于求格局难改
AI大模型在垂直行业的应用:技术概念、常识与实例解析
Excel表格中筛选数字的三种方法:从基础筛选到VBA编程
Word公式编辑器使用指南:快速创建数学公式技巧
厨房用集成灶:功能、选购与使用全攻略
眼睛干涩、模糊?多补充这5类维生素,能改善眼睛疲劳,护眼明目
如何区分深股和沪股?这些区分方法有哪些市场意义?
主机内含解析:核心组件的重要性与功能一览
智能演化:从生命起源到人工智能