第09讲:.NET中的继承各种实战应用与多态原理分析

1.继承基础

继承的概念:从现实生活中理解继承,说我们生活中的继承主要是财产,我们程序中的继承,主要是代码(属性、方法)通过创建一个windows窗体程序,观察两个窗体,我们可以发现它们都继承自Form

A:代码复用

继承在使用中,有什么要求和特点呢?

特点:继承具有传递性! A-->B-->C A会具有B和C的相关属性和方法,也就是C会把允许继承的内容,传递给他的下一级。

要求:继承虽然可以有很多层,但是继承具有单根性!也就是说一个类A可以继承自B,但是A不能同时继承C….

C++中是允许多重继承的,但是C#和java是不允许的。 A-->B,C 这个是不允许的,因为多重继承如果不注意的话很容易引起混乱。

我们刚才观察Form的继承关系,会看到如下内容:

public class Control : Component, IDropTarget, ISynchronizeInvoke, IWin32Window, IArrangedElement, IComponent, IDisposable, IBindableComponent

我们发现,Component后面的全部是以I开头的类,其实这些全部是接口。也就是说,一个类可以同时继承一个父类,同时再实现多个接口。

2.继承的基本使用

【1】要求:当我们分析某些类的时候,如果这些类之间具有相同的属性和方法,我们可以考虑继承,但是使用继承的时候,要特别注意,我们就有继承关系的类之间,一定是“同类”。人包括教师、学生、教务;动物虽然有部分属性和人是一样的,但他们不是同类,最好不要继承。

当创建学生类,讲师类的时候会发现 他们都有共同的属性和方法,比如姓名、身份证、出生日期和工作.... 为了实现继承和代码的复用,以上的内容应该放到父类Person中。

图片[1] - 第09讲:.NET中的继承各种实战应用与多态原理分析 - 登山亦有道

接着,我们创建两个子类:Student、Teacher 继承后,添加自己的特有属性和方法

特别注意:我们通过子类能使用的父类成员有public类型的,但是不能直接使用private

【2】使用:非常简单,和没有继承关系差不多的。

通过刚才的例子,大家只是体会到了代码复用。其他的好处,根本没有看到!只有通过后续的学习才能逐渐体会,下边先总结两点关于继承使用的经验:

  • 经验1:在实际开发中,我们自己使用继承,不要把继承关系搞的太复杂,一般不要超过3层的继承。
  • 经验2:如果你使用的继承过多,或继承的层数多,万一我们如果某些代码写的有问题,你改掉一个后,其他的子类全部受到影响。这种影响也被称为代码地震…

3.继承与多态的实现

【1】父类的定义

{
    //公共属性

    //公共方法

    //私有方法(只能父类自己使用)

    //受保护的属性、方法(只能子类内部使用)

    //父类还有一个重要的作用:(如果你不知道,我们从现实生活中思考:我们可以继承前人为完成的事业,或提出的某些理论)
   //言外之意,就是父类可以提出一个未完成的行为(方法),然后让子类去实现!这个就是我们要说的抽象方法!

   //虚方法...
     
}

记住:抽象方法必须放到抽象类中。但是一个抽象类,是可以不包括任何抽象方法的!

【2】子类的定义

子类继承的父类如果有抽象方法,则子类必须重写抽象方法,除非子类也是抽象类。

通过VS的智能代码提示可以很方便的实现抽象类中的抽象方法。

图片[2] - 第09讲:.NET中的继承各种实战应用与多态原理分析 - 登山亦有道
实现抽象类

【3】虚方法的使用

在子类中,子类可以直接完全的使用虚方法的内容,也可以完全不使用虚方法的内容,当然还可以自己实现,同时继续使用虚方法的内容。

图片[3] - 第09讲:.NET中的继承各种实战应用与多态原理分析 - 登山亦有道
重写父类虚方法

通过调试得到结论:抽象方法是不可能被调用的,只有子类重写的方法被调用。父类虚方法是否被调用,取决于子类是否重写,和是否调用。

【4】多态的相关概念

多态是面向对象编程语言的程序特性,特点是,当我们调用者使用多态机制的时候,可以不关心具体的实现。我们就想象成,我们想调用一种行为,但是这种行为可能有多种表现,而具体如何表现,我们程序编写时是无法知道的。只有程序运行的时候才能确定。这个行为是虚拟机本身特有的。多态就是一种灵活的扩展实现。

多态的本质是一种类型,是多种行为的实现。

多态告诉我们:面向抽象编程,可以让程序的扩展性大大增强!

特别注意:多态的行为,只能限于父类中的抽象方法或虚方法!

多态实现:父类定义抽象方法或者虚方法,不同子类分别重写抽象方法或虚方法即可。

© 版权声明
THE END
喜欢就支持一下吧
点赞65赞赏 分享
评论 晨岩, 涂鸦清单等人在此发表了2条热情洋溢的评论
匿名的头像 - 登山亦有道
提交
匿名的头像 - 登山亦有道

昵称

在 WordPress 上使用 Sticker Heo 增添互动时的乐趣吧 !

取消
昵称表情代码图片
    • 涂鸦清单的头像 - 登山亦有道
      涂鸦清单 Windows Chrome 86.0.4240.198
      • 晨岩的头像 - 登山亦有道
        晨岩作者 Windows Edge 104.0.1293.70