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

一.

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

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

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

先描述一个小事物,手机。手机有个功能就是来电显示,早期的手机,显示的只有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输出了。

 

转载于:https://www.cnblogs.com/wsw-bk/p/7739903.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值