java final class 实例化_重学Java 面向对象 之 final

final 的套路:当初在背面试题的时候final出现的概率可以说是相当高了,在各种面试题库中都少不了它的身影,一说起final ,那打开方式差不多就是这样的:1. 对于基本类型变量:final 修饰的变量不可修改2. 对于引用型变量: final 修饰的对象,引用本身不可修改,但是被引用的内容可以修改。3. 对于 方法 : 方法不能重写4. 对于类:类不能被继承因为当时看了太多遍同时内容简单...
摘要由CSDN通过智能技术生成

final 的套路:

当初在背面试题的时候final出现的概率可以说是相当高了,在各种面试题库中都少不了它的身影,一说起final ,那打开方式差不多就是这样的:

1.  对于基本类型变量:final 修饰的变量不可修改

2.  对于引用型变量: final 修饰的对象,引用本身不可修改,但是被引用的内容可以修改。

3. 对于 方法 : 方法不能重写

4. 对于类:类不能被继承

因为当时看了太多遍同时内容简单又好背,现在不看书也能写出来了,至于具体的代码示例这里就不放了,网上也比较多。

但是自己从来没有想过为什么。

为什么不让类被继承?为什么不让人家重写方法?

反向思考

关于这个问题我觉得反向来思考是最有效的,那就是如果我继承了又怎么样,我重写了又会如何。

最后发现如果继承或重写了我们可能就有很大的麻烦,还是不要继承,也不要重写了吧,然后我们就在类和方法上加上了final。

而关于final与不可变性,可以从变量,方法,类三个角度来思考。

变量与final

大家初学时都会碰到的Math类,而Math类中有着许多的static变量,是可以共享的,如耳熟能详的PI,同时它也被设计成了final 的。

3760ef42244abc0e14194644a38c988a.png

假设我们现在正在开发一个计算各种图形参数的程序,你负责开发Circle(sphere)的部分,另外一个人(就叫背锅侠吧,名字揭示了命运。。。)负责开发sphere(球体),很明显,你们的各种计算过程中都会涉及到PI这个变量。

假如PI没有加final

有一天你觉得这个PI怎么看起来这么长啊,真是不爽,你的运算结果只需要保留两位小数就行了,但我却需要拿一个这么多小数位的变量,于是你决定在自己的类初始化的时候修改这个变量的值,让它只有两位小数。而你不知道的是,负责开发球体的那个伙计他的计算结果要保留到小数点后4位。

悲剧到这里已经很明显了:你们自己测试的时候都没什么问题,而用户在使用程序计算完一个圆的各种参数后,再计算其他涉及到PI变量的程序都没办法得到想要的结果,比如计算球

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值