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中的继承各种实战应用与多态原理分析 - 登山亦有道](http://qiniu.chenyan98.cn/wp-content/uploads/2022/09/c65dff3d0f.webp)
接着,我们创建两个子类:Student、Teacher 继承后,添加自己的特有属性和方法
特别注意:我们通过子类能使用的父类成员有 public 类型的,但是不能直接使用 private
【2】 使用:非常简单,和没有继承关系差不多的。
通过刚才的例子,大家只是体会到了代码复用。其他的好处,根本没有看到!只有通过后续的学习才能逐渐体会,下边先总结两点关于继承使用的经验:
- 经验 1:在实际开发中,我们自己使用继承,不要把继承关系搞的太复杂,一般不要超过 3 层的继承。
- 经验 2:如果你使用的继承过多,或继承的层数多,万一我们如果某些代码写的有问题,你改掉一个后,其他的子类全部受到影响。这种影响也被称为代码地震…
3. 继承与多态的实现
【1】 父类的定义
{
//公共属性
//公共方法
//私有方法 (只能父类自己使用)
//受保护的属性、方法 (只能子类内部使用)
//父类还有一个重要的作用:(如果你不知道,我们从现实生活中思考:我们可以继承前人为完成的事业,或提出的某些理论)
//言外之意,就是父类可以提出一个未完成的行为 (方法),然后让子类去实现!这个就是我们要说的抽象方法!
//虚方法...
}
记住:抽象方法必须放到抽象类中。但是一个抽象类,是可以不包括任何抽象方法的!
【2】 子类的定义
子类继承的父类如果有抽象方法,则子类必须重写抽象方法,除非子类也是抽象类。
通过 VS 的智能代码提示可以很方便的实现抽象类中的抽象方法。
![图片[2] - 第09讲:.NET中的继承各种实战应用与多态原理分析 - 登山亦有道](http://qiniu.chenyan98.cn/wp-content/uploads/2022/09/797a277115.webp)
【3】 虚方法的使用
在子类中,子类可以直接完全的使用虚方法的内容,也可以完全不使用虚方法的内容,当然还可以自己实现,同时继续使用虚方法的内容。
![图片[3] - 第09讲:.NET中的继承各种实战应用与多态原理分析 - 登山亦有道](http://qiniu.chenyan98.cn/wp-content/uploads/2022/09/6b3d47e661.webp)
通过调试得到结论:抽象方法是不可能被调用的,只有子类重写的方法被调用。父类虚方法是否被调用,取决于子类是否重写,和是否调用。
【4】 多态的相关概念
多态是面向对象编程语言的程序特性,特点是,当我们调用者使用多态机制的时候,可以不关心具体的实现。我们就想象成,我们想调用一种行为,但是这种行为可能有多种表现,而具体如何表现,我们程序编写时是无法知道的。只有程序运行的时候才能确定。这个行为是虚拟机本身特有的。多态就是一种灵活的扩展实现。
多态的本质是一种类型,是多种行为的实现。
多态告诉我们:面向抽象编程,可以让程序的扩展性大大增强!
特别注意:多态的行为,只能限于父类中的抽象方法或虚方法!
多态实现:父类定义抽象方法或者虚方法,不同子类分别重写抽象方法或虚方法即可。
作者:晨岩
本站所有文章除特别声明外,均采用 BY-NC-SA 4.0 许可协议。转载请注明出处!