1 / 12

面向对象程序设计 (Visual C# .NET)

面向对象程序设计 (Visual C# .NET). 安徽机电职业技术学院 信息工程系 汪 学 文 wxwOOP@126.com 2007 年 9 月. 第 7 课 类的多态性. 上一课的示例 Poin-Cirlce3-Cylinder ,我们简单演示了类的多态性。 多态性是一个面向对象的概念,它允许以相似的方式来对待所有 的派生类,尽管这些派生类是各不相同的。创建派生类的目的是为了获得更多的特殊功能。

mason
Télécharger la présentation

面向对象程序设计 (Visual C# .NET)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 面向对象程序设计(Visual C# .NET) 安徽机电职业技术学院 信息工程系 汪 学 文 wxwOOP@126.com 2007年9月

  2. 第7课 类的多态性 • 上一课的示例Poin-Cirlce3-Cylinder,我们简单演示了类的多态性。 • 多态性是一个面向对象的概念,它允许以相似的方式来对待所有 的派生类,尽管这些派生类是各不相同的。创建派生类的目的是为了获得更多的特殊功能。 • 在Poin-Cirlce3-Cylinder示例中,计算圆面积的方法与计算圆柱体的表面积的方法是不相同的,但都可以通过Area( )方法进行计算,不同对象的Area( )方法是不相同的,但对于调用者来说,使用很方便(既可以用派生类调用Area( )方法,也可以用基类调用Area( )方法),因为调用者无需知道计算细节有何不同。

  3. 7.1 基本概念 • 所谓多态,就是把派生类对象当成基类对象来使用。换句话说,就是认为派生类对象是(is a)一种基类对象。 • 把派生类对象当成基类对象来使用,就是“多态”技术的核心。 • 多态性引用只能引用基类的成员。 • 多态的实现方式有以下几种: • 虚方法 • 抽象方法 • 接口

  4. 7.2 虚方法 • 如果希望基类中的某个方法能够在派生类中进一步得到改进,那么可以把这个方法定义为虚方法。 • 虚方法就是能在派生类中能够对其实现进一步改进的方法。 • 在基类的定义中,通过virtual关键字来说明该方法为虚方法。 • 在派生类的定义中,如果要重载基类的虚方法,使用override关键字。

  5. public class Point { public virtual double Area() { return 0.0; } } public class Circle : Point { public override void Area() { return Math.PI * Math.Pow(this.radius,2); } }

  6. 多态性测试 Point[] pointArray = new Point[5]; pointArray[0] = new Point(10,10); pointArray[1] = new Circle(20,20,3.5); pointArray[2] = new Cylinder(30,30,4.5,5); pointArray[3] = new Point(40,40); pointArray[4] = new Circle(50,50,2.5); string output = ""; foreach (Point p in pointArray) { output += p.Name+":\t"+p.ToString()+"\n" +"\t面积:"+p.Area()+"\n" +"\t体积:"+p.Volume()+"\n\n"; } MessageBox.Show(output, "类的多态性示例"); 示例代码位于“CSharp示例\第7课\PointCirlceCylinder”

  7. 7.3 抽象方法 • 基类中定义的虚方法,派生类可以重新以新的方式实现(使用override关键字),也可以不提供实现,这时,调用的是基类的实现方法。 • 有时,在基类定义中,基类不提供实现方法,而要求派生类必须实现该方法。这时,可以使用抽象方法。 • 在定义基类方法时,使用abstract关键字,可以定义抽象方法。 • 抽象方法是一个没有被实现的空方法。 • 含有抽象方法的类是抽象类,只能由派生类来继承,而不能用来实例化对象。相当于定义了一个模板。 • 并不要求抽象类必须包含抽象成员。含有抽象成员的类一定是抽象类。抽象类可以包含非抽象成员。

  8. 7.2 抽象方法 public abstract class Shape { public virtual double Area() { return 0.0; } public virtual double Volume() { return 0.0; } public abstract string Name { get; } }

  9. Shape[] shapeArray= new Shape[5]; shapeArray[0] = new Point(10,10); shapeArray[1] = new Circle(20,20,3.5); shapeArray[2] = new Cylinder(30,30,4.5,5); shapeArray[3] = new Rectangle(40,40,12.5,20); shapeArray[4] = new Cube(50,50,2.5,4.6,10); string output = ""; foreach (Shape p in shapeArray) { output += p.Name+":\t"+p.ToString()+"\n" +"\t面积:"+p.Area()+"\n" +"\t体积:"+p.Volume()+"\n\n"; } MessageBox.Show(output, "类的多态性示例"); 示例代码位于“CSharp示例\第7课\AbstractSample”

  10. 7.4 上机 • 完成实验报告7。 • 给Point-Circle-Cylinder应用程序添加一个圆锥体类(Cone),该类继承自Circle类,并具有Height属性,并重载基类的Area和Volume方法。测试类的多态性。 • 请大家上机时,将上课所讲的示例调试成功,着重理解类的继承性和类的多态性。

More Related