我正在读一本关于Java的书,它说你可以将整个类声明为final。我想不出有什么地方可以用它。
我只是一个编程新手,我想知道程序员是否真的在他们的程序中使用这个。如果他们使用,他们什么时候使用,这样我就能更好地理解它,知道什么时候使用它。
如果Java是面向对象的,并且你声明了一个final类,难道它不会阻止类具有对象的特征吗?
我正在读一本关于Java的书,它说你可以将整个类声明为final。我想不出有什么地方可以用它。
我只是一个编程新手,我想知道程序员是否真的在他们的程序中使用这个。如果他们使用,他们什么时候使用,这样我就能更好地理解它,知道什么时候使用它。
如果Java是面向对象的,并且你声明了一个final类,难道它不会阻止类具有对象的特征吗?
当前回答
最好的例子是
公共最终类
这是一个不可变的类,不能扩展。 当然,不仅仅是使类final为不可变。
其他回答
我只知道一个实际用例:生成类
在生成类的用例中,我知道一个:依赖注入,例如https://github.com/google/dagger
是的,有时您可能需要这样做,无论是出于安全性还是速度原因。在c++中也可以做到。它可能不适用于程序,但更适用于框架。 http://www.glenmccl.com/perfj_025.htm
在java中,final关键字用于以下场合。
最后一个变量 最后的方法 最后的课程
在java中,final变量不能重赋,final类不能扩展,final方法不能重写。
如果类被标记为final,这意味着类的结构不能被任何外部的东西修改。最明显的是当你在做传统的多态继承时,基本上类B扩展A是行不通的。它基本上是一种保护代码某些部分(一定程度上)的方法。
澄清一下,标记类final并没有将其字段标记为final,因此不会保护对象属性,而是保护实际的类结构。
关键字final本身意味着某些东西是最终的,不应该以任何方式修改。如果一个类被标记为final,那么它就不能被扩展或子类化。但问题是我们为什么要做期末考?在我看来,原因有很多:
标准化:一些类执行标准函数,它们是不打算被修改的,例如类执行与字符串操作或数学函数相关的各种函数等。 安全原因:有时我们编写的类执行各种身份验证和密码相关的功能,我们不希望其他人修改它们。
我听说在期末课上批改分数可以提高效率,但坦率地说,我觉得这个论点没有多大分量。
如果Java是面向对象的,并且你声明了一个final类,不是吗 停止类具有对象特征的想法?
也许是的,但有时这就是预期的目的。有时我们这样做是为了获得更大的安全性等好处,牺牲了这个类的扩展能力。但是final类仍然可以在需要时扩展一个类。
另一方面,我们应该更喜欢组合而不是继承,final关键字实际上有助于执行这一原则。