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