我正在读一本关于Java的书,它说你可以将整个类声明为final。我想不出有什么地方可以用它。
我只是一个编程新手,我想知道程序员是否真的在他们的程序中使用这个。如果他们使用,他们什么时候使用,这样我就能更好地理解它,知道什么时候使用它。
如果Java是面向对象的,并且你声明了一个final类,难道它不会阻止类具有对象的特征吗?
我正在读一本关于Java的书,它说你可以将整个类声明为final。我想不出有什么地方可以用它。
我只是一个编程新手,我想知道程序员是否真的在他们的程序中使用这个。如果他们使用,他们什么时候使用,这样我就能更好地理解它,知道什么时候使用它。
如果Java是面向对象的,并且你声明了一个final类,难道它不会阻止类具有对象的特征吗?
当前回答
在java中,final关键字用于以下场合。
最后一个变量 最后的方法 最后的课程
在java中,final变量不能重赋,final类不能扩展,final方法不能重写。
其他回答
面向对象不是关于继承,而是关于封装。继承会破坏封装。
在很多情况下,声明类final是非常有意义的。任何代表“价值”的对象,如颜色或金额,都可能是最终的。他们是独立的。
如果您正在编写类库,请将类设为final,除非您显式地将它们缩进以派生。否则,人们可能会派生你的类并重写方法,破坏你的假设/不变量。这也可能有安全隐患。
Joshua Bloch在《Effective Java》一书中建议明确地为继承而设计,或者禁止为继承而设计,他指出为继承而设计并不是那么容易。
是的,有时您可能需要这样做,无论是出于安全性还是速度原因。在c++中也可以做到。它可能不适用于程序,但更适用于框架。 http://www.glenmccl.com/perfj_025.htm
Android Looper类就是一个很好的例子。 http://developer.android.com/reference/android/os/Looper.html
Looper类提供了某些不打算被任何其他类覆盖的功能。因此,这里没有子类。
最好的例子是
公共最终类
这是一个不可变的类,不能扩展。 当然,不仅仅是使类final为不可变。
将一个类保留为最终类的一个好处是:-
String类保持为final,这样任何人都不能重写其方法并更改功能。例如,没有人可以改变length()方法的功能。它总是返回一个字符串的长度。
这个类的开发人员不希望任何人改变这个类的功能,所以他把它作为最终的。