项目八 任务二 多态(课件)-《算法与程序设计--C#》(河北科学技术出版社)同步精品课堂

| 28页
| 178人阅读
| 8人下载
精品

内容正文:

8.2 多态 算法与程序设计--C# 同步精品课堂 河北科学技术出版社 教学目标 一 理解每种多态实现方式的特点和适用场景 理解多态的特点 03 04 掌握使用new关键字、虚方法重写和方法重载实现多态 理解多态的概念 01 02 教学目标 掌握国家标准《机械制图》中有关图幅、比例、字体图线等基本规定。 教学重难点 二 教学难点 1、多态的概念和特点 2、使用 new 关键字、虚方法重写和方法重载实现多态的具体方式 教学重点 1、 new关键字与虚方法重写的区别 2、方法重载与多态的关系 教学难点 导入新课 三 讨论: 我们大家都知道不同的动物(如猫、狗)可以发出不同的叫声;一个手机充电接口可以适配多种充电器。这种现象在编程中称为多态。那么如何在编程中用一种方式来描述这种“同一行为,不同实现”的情况呢? 新知讲授 四 多态的概念 多态是面向对象编程的三大特性之一,它允许不同的对象对同一消息做出不同的响应。简单来说,就是同一个方法调用可以根据对象的实际类型执行不同的代码。多态可以提高代码的可维护性和可扩展性,使得代码更加灵活和通用。 ➽多态的特点 (1)可替换性:多态的对象可以相互替换,而不影响程序的正常运行。 (2)可扩充性:可以方便地添加新的子类,而不需要修改现有的代码。 (3)接口性:多态通过抽象类或接口来定义统一的接口,子类实现这些接口。 (4)灵活性:可以根据实际情况动态地选择执行不同的代码。 新知讲授 四 多态的实现方式 (1)使用 new重新定义类的成员实现多态性 (2)虚方法的重写实现多态性 (3)使用方法重载; ➽使用 new重新定义类的成员实现多态性 使用 new 关键字可以隐藏基类的方法,在子类中定义一个与基类方法同名的方法。当通过基类引用调用该方法时,会调用基类的方法;当通过子类引用调用该方法时,会调用子类的方法。 新知讲授 四 · 示例: class Animal //这是一个基类 { public void Eat() //基类的方法 { Console.WriteLine("动物要吃东西!"); } } class Dog : Animal //这是一个派生类 { public new void Eat() //重新定义方法成员 { Console.WriteLine("狗狗要吃骨头!");} } 新知讲授 四 此时派生类Dog的方法Eat替换了基类Animal的方法Eat。若执行以下语句: Dog d= new Dog(); d.Eat(); 则调用的是新的类的成员方法,而不是基类的成员方法。因此最终得到以下结果: 狗狗要吃骨头! 新知讲授 四 ➽虚方法的重写实现多态性 虚方法重写是指在基类中使用 virtual 关键字定义一个方法,在子类中使用 override 关键字重写该方法。 当通过基类引用调用该方法时,会根据对象的实际类型调用相应子类的方法。 · 作用 允许派生类重写基类中的方法,实现多态。 · 在基类中声明虚方法的格式 public virtual返回值类型 方法名称([参数列表]) { //方法体语句 } 新知讲授 四 ➽虚方法的重写实现多态性 · 在派生类中覆盖虚方法的格式如下: public override 返回值类型 方法名称([参数列表]) { //方法体语句 } 其中,基类与派生类中的方法名称与参数列表必须完全一致,当不需要参数时省略参数列表。override操作发生在程序运行之时。 新知讲授 四 · 示例: class Animal { public virtual void Speak() { Console.WriteLine("Animal is speaking."); } } class Dog : Animal { public override void Speak() { Console.WriteLine("Dog is barking.");} } 新知讲授 四 · 示例: class Program { static void Main(string[] args) { Animal animal = new Dog(); animal.Speak(); } } Dog is barking. 新知讲授 四 · 注意 类中的成员字段和静态方法不能声明为virtual,因为virtual只对类的实例函数和属性有意义。 · 使用virtual和override时要注意以下四点: (1)字段不能是虚拟的,只有方法、属性、事件和索引器才可以是虚拟的。 (2)使用virtual修饰符后,不允许再使用static、abstract或override修饰符; (3)派生类对象即使被强制转换为基类对象,所引用的仍然是派生类的成员; (4)派生类可以通过密封来停止虚拟继承,此时派生类的成员使用sealed override声明。 新知讲授 四 ➽任务:分析下列程序的执行过程 // 基类 class Animal { public virtual void Speak() { Console.WriteLine("动物发出声音"); } } 新知讲授 四 ➽任务:分析下列程序的执行过程 // 子类 class Dog : Animal { public override void Speak() { Console.WriteLine("狗汪汪叫"); } } 新知讲授 四 ➽任务:分析下列程序的执行过程 static void Main() { Animal animal = new Animal(); animal.Speak(); // 调用基类的方法 Dog dog = new Dog(); dog.Speak(); // 调用子类的方法 Animal animalDog = new Dog(); animalDog.Speak(); // 调用子类的方法 } 动物发出声音 狗汪汪叫 狗汪汪叫 新知讲授 四 ➽分析 1、Animal 类中使用 virtual 关键字将 Speak 方法定义为虚方法。 2、Dog 类中使用 override 关键字重写了 Speak 方法。 3、在 Main 方法中,通过基类引用 animalDog 指向 Dog 对象,调用 Speak 方法时会调用子类的方法。 新知讲授 四 ➽方法重载实现多态性 通过方法重载,可以根据参数的类型选择相应的方法进行调用。这样,在同一个类中定义了多个具有相同名称但参数列表不同的方法,实现了多态性。根据实际参数的类型,调用相应的方法,从而实现不同的行为。这就是方法重载实现多态性的一种方式。 • 方法重载是指在同一个类中,允许定义多个同名方法,但参数列表必须不同。 • 方法重载通过方法签名(方法名和参数列表)来区分。 • 格式: public void MethodName(int a) { ... } public void MethodName(string b) { ... } 新知讲授 四 ➽任务:分析下列程序的执行过程 class Calculator { public int Add(int a, int b) { return a + b; } public double Add(double a, double b) { return a + b; } } 新知讲授 四 ➽任务:分析下列程序的执行过程 class Program { static void Main(string[] args) { Calculator calc = new Calculator(); Console.WriteLine(calc.Add(1, 2)); Console.WriteLine(calc.Add(1.5, 2.5)); } } 3 4.0 师生互动 五 1、总结多态的特点; 2、总结多态的实现方式; 讨论 随堂练习 六 1、方法重载是指在同一个类中,方法名 ______,参数列表 ______。 答案:相同 不同 解析:方法重载是指方法名相同,参数不同。 2、在C#中,使用______关键字可以在派生类中隐藏基类的方法。 答案:new 解析:new可以重新定义类的成员实现多态性。 随堂练习 六 3、以下关于 C# 多态的描述,正确的是( ) A. 多态只能通过虚方法实现 B. 多态允许不同类型的对象对同一消息作出不同的响应 C. 方法重载不属于多态的范畴 D. 使用 new 关键字隐藏基类方法不能实现任何形式的多态 答案:B 解析:多态的核心概念,不同类型的对象对于相同的操作(消息)可以有不同的实现方式。 随堂练习 六 4、 以下方式中可以实现多态的是( ) A. 使用new关键字 B. 使用virtual和override关键字 C. 使用方法重载 D. 以上都可以 答案:D 解析:new关键字可以隐藏基类方法,virtual和override可以实现虚方法的多态,方法重载也是一种多态形式。 随堂练习 六 5、若要在派生类中重写基类的虚方法,基类方法使用( )关键字声明,派生类方法使用( )关键字声明。 A. virtual;new B. override;virtual C. virtual;override D. new;override 答案:C 解析:在 C# 中,基类的方法需要使用 virtual 关键字声明为虚方法,派生类中重写该虚方法时需要使用 override 关键字。 随堂练习 六 6.多态只能通过虚方法实现。( ) 7.方法重载要求方法名相同,参数列表不同,返回值类型必须相同。( ) 答案:6. 错 7. 错 解析: 6.多态可以通过虚方法、抽象方法、接口、方法重载等多种方式实现。 7.方法重载要求方法名相同,参数列表不同,但返回值类型可以不同。返回值类型不是方法重载的判断依据。 课堂小结 七 谢谢 $$

资源预览图

项目八 任务二 多态(课件)-《算法与程序设计--C#》(河北科学技术出版社)同步精品课堂-第1页
1
项目八 任务二 多态(课件)-《算法与程序设计--C#》(河北科学技术出版社)同步精品课堂-第2页
2
项目八 任务二 多态(课件)-《算法与程序设计--C#》(河北科学技术出版社)同步精品课堂-第3页
3
项目八 任务二 多态(课件)-《算法与程序设计--C#》(河北科学技术出版社)同步精品课堂-第4页
4
项目八 任务二 多态(课件)-《算法与程序设计--C#》(河北科学技术出版社)同步精品课堂-第5页
5
项目八 任务二 多态(课件)-《算法与程序设计--C#》(河北科学技术出版社)同步精品课堂-第6页
6

由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。