面向对象的多态性

面向对象的多态性

ID:12496288

大小:44.00 KB

页数:8页

时间:2018-07-17

面向对象的多态性_第1页
面向对象的多态性_第2页
面向对象的多态性_第3页
面向对象的多态性_第4页
面向对象的多态性_第5页
资源描述:

《面向对象的多态性》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、本篇博客我们来学习面向对象的多态性,多态性主要的表现形式就是在继承中当派生类从基类继承时,它会获得基类的所有方法、字段、属性和事件。当父类和子类的成员签名相同的时候,我们可以定义让子类的这个同名成员以何种形式显示出来,父类的这个的成员在子类中又用何种方式存在,这种多面的表现方法我们称为多态。如果我们要更改基类的数据和功能时,也就是说子类中可以以自己的方式去实现父类的功能,有两种方式:1.我们还在子类中可以使用override关键字重写基类中用virtual关键字修饰的虚拟的基成员;2.可以在子类中使用new关键字让派生成员替换基成员,此时基类成员只

2、是被有意的隐藏掉了。   举一个现实生活的例子,我们来理解一下多态,爸爸如果有一套房子留给了儿子,并对儿子说:这个房子我装修了一下,如果你不喜欢这个风格,可以自己再重新翻新一下,但是我就有一个要求,就是这个房子唯一不变就是我喜欢的挂在走廊墙上的一张油画,你不许拆掉它。儿子欣然同意,拿到钥匙去看了看房子,儿子有点对爸爸的审美产生了质疑,装修的风格也太古朴了,于是儿子决定把客厅和卧室全部装修了,改成了后现代主义的风格,这时发生了我们所说的多态的第一种方式,被称为重写或覆写,爸爸给房子时,把允许重新装修的地方用virtual关键字修饰,儿子就可以用ove

3、rride关键字修饰那些允许重新装修的房间,这时父亲来到这个房子时会发现房子的客厅和卧室全部改变了。装修完客厅和卧室后,儿子怎么看都觉得走廊上的油画太格格不入了,因为油画的内容是田园风情,这时儿子想起爸爸不让动这幅画,所以儿子想到了一个方法,就买了一副新的抽象派的油画盖在爸爸的画上面,这样爸爸如果来到家,想看自己的画,也是存在的,这时发生的就是第二种方式,如果爸爸想在儿子的房子里看自己的东西,就使用base关键字,儿子的新油画用new关键字隐藏住爸爸的画。    通过这个例子我们应该就能理解一点多态的含义了,我们先来学习第一种情况:重写。在使用重写

4、的时候,一定要注意到一点,就是为了让子类可以完全的重写父类中的成员,父类在定义这些成员的时候,一定要使用virtual关键字,让可以重写的方法成为虚方法,让可以重写的属性成为虚属性,子类在重写这个方法或属性的时候,将virtual替换成override关键字,代表已将父类的成员替换为了它自己的成员并实现。我们来看一下具体的语法,为了举例方便,我采用的是方法重写的实例,如: classFatherClass{publicvirtual void Method(){}}classSonClass:FatherClass{publicoverride v

5、oid Method(){}}    大家来看看父类中的方法,按照我们上节课所学的如果父类中的成员不是private修饰时,子类中是都可以访问到一个成员,但是重写是特殊的,根据我举的例子大家回忆一下,这时如果父亲来到儿子的房子,将会只存在被儿子重新装修的客厅和卧室,这两个屋原来的风格都不存在了。也就是说,在子类中,这两个屋子只有一种形态,就是儿子重新装修定义的。虽然其他的屋子父亲也允许儿子装修,使用了virtual关键字修饰了,但是因为儿子没有使用override关键字重新装修,其他几个屋的表现形态还是父亲原先存在的。这就说明了一点,子类要想重写父

6、类的方法,必须是父类定义了virtual,子类使用override。当如果我想在子类的方法中再用父类的那个被覆盖的方法时,只需要使用base关键字就可以代表继承的父类了,base关键字我们在上节课的类七构造方法的继承中也学到过。我们把上面的语法在子类的Method方法中,加base用法,基本语法如下:publicoverride void Method(){base.Method();}    这样的话,在调用子类的Method方法时,虽然重写了这个方法,但是使用base关键字又再次引用了父类的Method方法。     当父类定义了virtual

7、,而子类的同名方法没有使用override重写,这样是可以的,这时子类中仍然包括父类的方法,也就是说子类中有两个同名的方法,但是编译器在我们创建子类对象的时候,会显示子类的方法,而不会显示继承自父类那个同名的方法。如果你使用VS编译这样情况时,它会有一个警告:子类的方法将隐藏父类的方法。如果想重写请在子类中加入override关键字,如果想隐藏请使用new关键字。使用override关键字刚才我们已经讲过了,如果用new就代表创建一个新的方法,这个子类中的新方法隐藏父类的方法,这就是我们说的第二种多态的形式隐藏父类的方法。        隐藏父类方

8、法,父类可以是virtual修饰的虚方法,也可以是普通方法应该在子类中显式的使用new关键字,告知编译器当调用子类的这个方

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。