重写前奏~继承和多态
2016-02-15 16:23
225 查看
上次说到的重载是指同一类中方法和方法之间的关系,这次向大家介绍的重写是子不同类中方法和方法的关系;在介绍重写之前,要先说说继承和多态;
1、子类拥有父类非private的属性和性能,也就是说,父类中protected修饰的类成员,对子类公开,但对其他类不公开;
2、子类具有自己的属性和和功能,即子类可以扩展父类没有的属性和功能;
3、子类还可以以自己的方式实现父类的功能(方法重写);
猴子和动物的关系是继承
![](http://img.blog.csdn.net/20160215162505576?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](file:///C:/Users/wkx/Documents/My%20Knowledge/temp/52da3f64-af07-48ab-911d-a0d43cf97af2_4_files/ce993d44-845e-4752-9b7d-b81a4443b09c.jpg)
多态:不同的对象可以执行相同的动作,但是通过她们自己的实现代码来执行。杰克逊把自己的衣服分别给自己的三个歌迷,三个歌迷穿着这件衣服里唱歌,执行唱歌的动作,虽然是用自己的方法唱,唱出来的声音不一样。
2、子类在工作时以自己的方法来实现(歌迷在唱歌时有自己的唱法);
3、子类以父类的身份出现时,子类特有的属性和方法不可使用(歌迷在唱时不要暴露出中文和自己的真实身份,不要说中国话)
为使子类的实例完全来自父类的类成员父类,父类必须将成员声明为虚拟的。(通过在该成员的返回类型之前添加Virtual关键字来实现。)
继承
对象的继承代表了“is -a ”的关系,A和B可以描述成B是A,就可以称为B可以继承A,不能相互颠倒。继承者是被继承者的特殊化。在继承中,子类是派生类,父类是基类。子类不但继承父类的所有特征,还可以定义新的特征。1、子类拥有父类非private的属性和性能,也就是说,父类中protected修饰的类成员,对子类公开,但对其他类不公开;
2、子类具有自己的属性和和功能,即子类可以扩展父类没有的属性和功能;
3、子类还可以以自己的方式实现父类的功能(方法重写);
继承的优点是:
使得所有子类公共的部分都放到了父类,使得代码得到了共享,避免了重复。继承的缺点是:
父类变,子类不得不变。猴子和动物的关系是继承
具体代码:
![](file:///C:/Users/wkx/Documents/My%20Knowledge/temp/52da3f64-af07-48ab-911d-a0d43cf97af2_4_files/ce993d44-845e-4752-9b7d-b81a4443b09c.jpg)
多态
继承是多态的基础,没有继承多态无意。继承是为了复用,而多态是为了在复用时解决耦合问题。下面我用不是活生生的例子给大家从概念处讲解一下。(打扰Michael Joseph Jackson老先生了)多态:不同的对象可以执行相同的动作,但是通过她们自己的实现代码来执行。杰克逊把自己的衣服分别给自己的三个歌迷,三个歌迷穿着这件衣服里唱歌,执行唱歌的动作,虽然是用自己的方法唱,唱出来的声音不一样。
注意:
1、子类以父类的身份出现(歌迷以杰克逊的身份出现);2、子类在工作时以自己的方法来实现(歌迷在唱歌时有自己的唱法);
3、子类以父类的身份出现时,子类特有的属性和方法不可使用(歌迷在唱时不要暴露出中文和自己的真实身份,不要说中国话)
为使子类的实例完全来自父类的类成员父类,父类必须将成员声明为虚拟的。(通过在该成员的返回类型之前添加Virtual关键字来实现。)
多态中为什么要虚拟呢?什么地方需要虚拟呢?
把歌迷与歌迷之间真正不同的地方在杰克逊类里虚拟起来,比如歌迷的唱法,歌迷唱的动作。至于杰克逊的衣服,都是一样的,穿法不变,就不必虚拟,哪个歌迷都能穿,歌迷可以直接拿过来用。用到虚拟的,就是不能直接拿过来用的,真正有区别的,要经过掩饰一下的。比如想把中文“杰克逊”改为“Michael Joseph Jackson ”,只需要该一个地方就可以了。当然,这是在继承的基础上用到的多态。如果都不承认自己是杰克逊的歌迷,那就没必要穿他的衣服了,更别说再参加这次唱歌的活动了;具体代码,见下一节:重写
相关文章推荐
- iOS 利用CoreLocation和MapKit开发搜索附近的商场功能
- js基础篇——call/apply、arguments、undefined/null
- mongodb java driver3.0初探
- Java 高并发缓存与Guava Cache
- Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
- _exit 和 exit的区别
- 开机需要重新设置默认网关
- DB2操作流程
- 获取日期Date年月日
- 深入浅出Python装饰器
- Android的四大组件——Activity
- jquery.validate 自定义验证方法
- HTML5物理游戏开发 - 越野山地自行车(二)创建一辆可操控的自行车
- iOS之UIRefreshControl系统下拉刷新
- background-image背景图片拉伸平铺
- VsFtpd服务配置简明笔记
- 转载:移动端自适应:flexible.js可伸缩布局使用
- iOS常见的错误大全
- c# - Cache Code
- IOS开发 钥匙串 证书“此证书的签发者无效”解决方法(详细!!)