正确理解Java中为何关键词private声明的方法不存在覆盖

前言

  • private关键词是面向对象语言实现封装的重要组成部分。就像是儿子撕葱虽然能继承父亲优秀的基因(方法)和恐怖的家产(变量),但父亲的一些私人物品是撕葱同学最好不要获得的(比如父亲初恋情人写给自己的信)。合理使用private关键词可以极大地发挥面向对象的优点。
  • final关键词则是Java中声明常量的一种方法。被final关键词击中后,变量将无法修改,函数将无法被覆盖,类将失去继续被继承的能力,瞬间花容失色。可见此君威力巨大,虽然会使当事人失去很多能力,但可以极大地提高编译和运行的效率,因此合理利用final,能更加极致地提升Java的性能。

如果一个方法不想在被继承之后被覆盖,可以声明为final。
但为什么说private方法在覆盖时不必声明final呢?

什么时候不想被覆盖

有的同学会问,什么地方会导致我们想要声明private final 这样的方法(变量)呢?
比如父亲会担心,儿子不小心把信箱里的信全部换成自己的(覆盖),导致父亲找不到初恋情人写给自己的信,这种事情的后果是不堪设想的。父亲为了防止自己的信被儿子的信覆盖,就会想方设法把这封信藏起来,就想声明
private final getLetter()
这个方法。

这么做有必要吗

我们来看代码和执行情况

public的覆盖情况

假设一个情景:
父亲有一辆车Auto,儿子从父亲那里继承了一张车Car
儿子和父亲都能从车库开车,即使用getDrive()


儿子如果把车停在自家车库(覆盖了父亲的车),父亲想要开车库里的车,就只能开儿子的车了。
调用及输出结果如下:

结果:

如果父亲把家里车库锁起来,不让儿子继承取车方法,则儿子将无法覆盖getDrive()方法

这时,回到我们最初的假设,即private方法能不能被覆盖。
如果能,则一定要声明final,不能让儿子把这封信覆盖了。
如果不能,则无需担心这个问题,即儿子根本找不到这封信。
真相只有一个。

private的覆盖情况

儿子继承了父亲的一切,打算覆盖getLetter()方法

父亲来到信箱前,翻了一团糟。

结果发现儿子的箱子里有儿子的信,而自己的信,依然躺在自己的箱子里,没有被儿子覆盖
这里写图片描述

事已至此,父亲长吁了一口气,面露喜色地累瘫在地上。

总结

看来private方法在声明后,不仅只是本类的对象可见而已,在别的类看来,这个类甚至可以说根本没有这个方法。
因此就不存在覆盖的问题了,也就不必声明final来限制覆盖。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值