电子教案-第5章 多态性、继承性、命名空间.ppt

电子教案-第5章 多态性、继承性、命名空间.ppt

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第5章 继承性、多态性和命名空间 继承性(inheritance)和多态性(polymorphism)是面向对象的重要机制,其提高了软件模块的可复用性和可扩充性。在第4章中已经介绍了面向对象的另一特性继承性。这一章我们将介绍了两种C# 2008中的重要概念抽象类和密封类,它们显示了C#语言的多态性。 C# 2008程序是通过使用名空间来组织的。其不仅可以是应用程序的内部结构体系,同样也可以是外部结构体系。如果程序中的一些元素要被导出到其他程序,可以使用命名空间。程序中免不了会出现错误,这时就会用到C#语言的异常处理机制。 5.1 继承机制 面向对象的重要机制之一继承是可以使用以前建造类的方法和属性。通过简单的程序代码来建造功能强大的类,不仅会节省很多编程时间,而且还可以减少代码出错的机会。 5.1.1 继承的概念 通过一个实际应用问题,来讲解类的继承这个问题,如代码所示。 【本示例参考:\示例代码\Chap05\NoUseInheritance】 在上面的程序中,定义了Person类和Student类,结果发现Student类包含了Person类的所有属性和方法。在C# 2008语言中,只要表明Student类继承了Person类,就不用在类Student中重复写类Person中的代码了。 5.1.2 继承的机制 子类对象中的成员变量的初始化实过程如下: (1)分配成员变量的存储空间,并进行默认的初始化。 (2)绑定构造函数参数,就是把new Person(实际参数列表)中所传递进的参数赋值给构造函数中的形式参数变量。 (3)如果有this()调用,则调用相应的重载构造方法。 (4)显式或隐式追溯调用父类的构造方法。 (5)进行实例变量的显式初始化操作,也就是执行定义成员变量时就进行赋值的语句。 (6)执行当前构造函数体中的代码。 5.2 多态性 在面向对象的系统中,多态性允许对一个对象进行操作,由一个对象完成一系列的动作,具体实现哪个动作由系统负责解释。在C# 2008中,多态性的定义是:同一操作作用于不同的类的实例,不同类将进行不同的解释,最后产生不同的执行结果。其支持两种类型的多态性:编译时多态性和运行时多态性。编译时多态性是通过重载来实现的,其根据传递的参数、返回的类型等信息决定实现何种操作。在第4章已经介绍了。运行时多态性是指直到系统运行时,才根据实际情况决定实现何种操作,其是通过虚方法来实现的。 5.2.1 虚方法 虚方法是通过在方法声明语句的访问修饰符和返回类型之间放置virtual关键字来实现的。当调用虚方法时,运行将确定调用对象是什么类的实例,并调用适当的覆盖方法,通过override关键字来覆盖。通过一段简单的代码如所示,来说明虚方法跟非虚方法的区别。 【本示例参考:\示例代码\Chap05\Difference】 运行结果: A.F B.F B.G B.G 5.2.2 抽象类和抽象方法 抽象方法可以看成是没有方法体的虚方法。其是必须被派生类覆盖的方法。在C# 2008中是通过关键字abstract来实现的。如果类的任何一个方法都是抽象的,则该类也必须声明为抽象的。 抽象类的用途是提供多个派生类可共享的基类的公共定义,并使用abstract关键字定义。先定义一个抽象类: abstract class MyClass { } 抽象类可以看成是接口和普通类的结合,代码5-6演示了抽象方法的使用。 5.2.3 抽象方法 抽象类中可以定义抽象方法,如果一个方法要声明为抽象方法,则方法前加上abstract修饰符即可。抽象方法是一个新的虚方法,它不提供具体的方法实现代码。只能在抽象类中声明抽象方法,对抽象方法,不能使用static或virtual修饰符,而且方法中不能有任何可执行代码,只要给出方法的原型就可以了。抽象类的派生类必须实现所有抽象方法,如代码所示。 【本示例参考:\示例代码\Chap05\AbstractMethod2】 5.2.4 密封类和密封方法 与override关键字连用的还有sealed关键字,sealed关键字用来表示密封的意思。在C# 2008中,密封类的作用是限制扩展性和灵活性。先定义一个简单的密封类: sealed class MyClass { } 当程序中密封了某个类时,其他类是不能继承该类的,如代码所示。 【本示例参考:\示例代码\Chap05\SealedClass1】 5.2.5 方法的隐藏 【本节示例参考:\示例代码\Chap05\HidingMethod】 还有一种方法可以实现在派生类中的覆盖,即new关键字。这种过程叫做方法的隐藏。但是,派生类和非抽象类的基类方法必须有相同的方法。代码演示了如何实现方法的隐藏。 运行结果: Study方法被调用

文档评论(0)

70后老哥 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档