首页 > 编程语言 > 详细

JAVA-初步认识-第八章-继承-子父类中成员变量的特点-覆盖的应用

时间:2017-10-26 23:59:33      阅读:301      评论:0      收藏:0      [点我收藏+]

一.

覆盖讲解了好几节,看来确实是个很重要的知识点。

其实我们最关心的不是覆盖的特点和覆盖的注意事项,这些小东西只要稍加注意,不写错就可以了。我们要注重什么,什么时候使用覆盖操作,这是我们开发时,使用最频繁的。

先不管什么覆不覆盖了,先用一个案例演示一遍。

先描述一个小事物,手机。手机有个功能就是来电显示,早期的手机,显示的只有num。编译后,一运行,发现没有任何问题。

技术分享

技术分享

技术分享

接下来,遇到一些问题。现在手机出来很多新的版本,来电显示功能发生了一些变化,有显示姓名和照片。我们要将这些东西加进来,

直接在原有的基础上,加上一些新的内容。编译运行没有问题。

 技术分享

但是有一些小问题,无论是name,还是picture都是后来的,把它们写在一起,合适么?不太合适,因为添加的name和pic相当于升级,这也是后期维护中的一部分。如果每次升级,都是修改源代码的话,如果发现升级的不对,还得该回去,这就会造成修改成本。这样就不利于该程序的扩展。而且,一升级就去修改代码的话,往往修改的不是一处,是多处,就会给你的升级带来灾难,甚至是毁灭性的,等你改完,不一定能改回去。所以,一般情况下,我们不建议对源代码进行修改,这样最危险。因此,在设计的时候就变得很重要,如果设计不好,后面全都出现不行。

因此,我们可以这么做,可以搞一个新类,newphone,它也是电话中的一种,让它去继承以前的phone就可以了,创建新的显示方法,来显示后期添加的东西。

技术分享

(这里为什么会有number的重复出现,是不是显得有点多余?)

一样是产生变化,但我们不准备去修改原来的类,直接通过一个类去继承它。用继承的方式来进行扩展。如果单独设计个类,和之前的一点关系都没有,会显得很麻烦,因为这个phone类中还有其他功能是不需要修改的,比如说通话,从以前到现在,通话功能一直都是一样的。也就是phone类中还有call()方法,你觉着newphone类中还需要重新定义么?就不需要了,而且我们知道新的东西,就是老的类中的一种,为什么不直接继承call(),拿来用呢?只是show()方法变了。因此,用继承就可以提高程序的扩展性。

技术分享

技术分享

技术分享

DOS结果显示,没有任何问题。看样子是解决了问题,但是还有不爽。这个newphone继承了phone,相当于继承了父类中的两个方法,意味着它也可以调用show(), 结果显示是可以的,

技术分享

但是爽吗?不爽了。子类出现以后,无非是为了改良父类中的来电显示功能,但是它有必要更改来电显示声明吗(这里是说show的名字)?父类本身就有来电显示的功能,子类只要继承过来就可以了,但是呢?子类想说,这个功能,我可以保留,但是我想改变功能的内容(保留show方法声明,但是里面的执行内容要发生变化)。这该怎么操作?没必要定义新方法,新方法定义完以后,老方法一样可以拿来用,而我要做的,就是把已有的来电显示功能改良。

想改良做的最简单的动作就是覆盖,保留父类原有功能,创建子类特有内容。以前有来电显示,我不喜欢,但是功能还得要,因为我也需要来电显示,只是我的来电显示的内容和你不一样。

技术分享

只要创建的是子类的对象,那么既能用show(), 也能用call(),p走的是子类的来电显示,和phone走的不一样,但也能走phone的call()。

技术分享

这里还有一点要注意,子父类的方法中num写了两遍,

技术分享

为什么不直接省略num这个语句呢?因为是覆盖,如果省略了num语句,那么调用子类的show()方法时,就没有num输出了。

 

JAVA-初步认识-第八章-继承-子父类中成员变量的特点-覆盖的应用

原文:http://www.cnblogs.com/wsw-bk/p/7739903.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!