不可变类的方法为什么要final修饰?

南风待你 2018-04-13 08:31:02
不可变类的方法为什么要final修饰?不可变类不是实例创建后不能改变吗,那这个和自己的方法是不是final有什么关系?麻烦大家介绍一下,谢谢
...全文
992 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Braska 2018-04-16
  • 打赏
  • 举报
回复
引用 7 楼 Noreaday 的回复:
引用 5 楼 Info_Qi 的回复:
自己的方法如果不用final修饰,就表示可以被重写和重载,不可变类用final修饰,就表示不能被继承也就不存在被修改
这个我知道,但是我不能理解的是 如果自己的方法能够被覆盖就不是不可变类了?
都叫final了 可修改可重写重载就不叫最终了。
南风待你 2018-04-16
  • 打赏
  • 举报
回复
引用 5 楼 Info_Qi 的回复:
自己的方法如果不用final修饰,就表示可以被重写和重载,不可变类用final修饰,就表示不能被继承也就不存在被修改
这个我知道,但是我不能理解的是 如果自己的方法能够被覆盖就不是不可变类了?
Coli薇 2018-04-15
  • 打赏
  • 举报
回复
final类是不能被继承的,不能被继承就说明他的方法不可能被覆盖
Info_Qi 2018-04-14
  • 打赏
  • 举报
回复
自己的方法如果不用final修饰,就表示可以被重写和重载,不可变类用final修饰,就表示不能被继承也就不存在被修改
南风待你 2018-04-14
  • 打赏
  • 举报
回复
引用 2 楼 codeman_cdb 的回复:
这个和调用方法是不是final没关系,final修饰的方法是不可被重写,final修饰的类不可被继承
恩,创建不可变类的四个原则有一条是确保类中的方法不能被子类覆盖,也就是使用final来修饰,为什么不可变类的方法不能被子类覆盖?
学妹等一下 2018-04-14
  • 打赏
  • 举报
回复
final修饰的类不可有子类,例如java.lang.Math类就是一个final类,它不可以有子类。 不可变类的意思是创建该类的实例后,该实例的属性是不可以改变的。Java提供的8个包装类和java.lang.String都是不可变类,当创建它们的实例后,其实例的属性不可变。
CrazyCoder1992 2018-04-13
  • 打赏
  • 举报
回复
准确来说是指向实例的引用不可改变,初始化是哪个实例就是哪个实例,后期不可以再指向其他实例。 但是实例里面的内容是可以修改的。
CrazyCoder1992 2018-04-13
  • 打赏
  • 举报
回复
这个和调用方法是不是final没关系,final修饰的方法是不可被重写,final修饰的类不可被继承

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧