我正在读一本关于Java的书,它说你可以将整个类声明为final。我想不出有什么地方可以用它。
我只是一个编程新手,我想知道程序员是否真的在他们的程序中使用这个。如果他们使用,他们什么时候使用,这样我就能更好地理解它,知道什么时候使用它。
如果Java是面向对象的,并且你声明了一个final类,难道它不会阻止类具有对象的特征吗?
我正在读一本关于Java的书,它说你可以将整个类声明为final。我想不出有什么地方可以用它。
我只是一个编程新手,我想知道程序员是否真的在他们的程序中使用这个。如果他们使用,他们什么时候使用,这样我就能更好地理解它,知道什么时候使用它。
如果Java是面向对象的,并且你声明了一个final类,难道它不会阻止类具有对象的特征吗?
当前回答
相关阅读:Bob Martin的《开闭原理》。
主要引用:
软件实体(类、模块、 函数等)应该是开放的 分机,但已关闭 修改。
最后一个关键字是在Java中强制执行的方法,无论是在方法上还是在类上。
其他回答
如果您将类层次结构想象成一棵树(就像在Java中那样),抽象类只能是分支,最终类只能是叶。不属于这两个类别的类可以同时是分支和叶。
这里并没有违反OO原则,final只是提供了一个漂亮的对称性。
在实践中,如果你想让你的对象是不可变的,或者如果你正在编写一个API,你想要使用final来告诉API的用户这个类不是用于扩展的。
final类是不能扩展的类。此外,方法可以声明为final,以表明不能被子类覆盖。
如果您编写api或库,并希望避免被扩展以改变基本行为,则防止类被子类化可能特别有用。
Final类不能进一步扩展。如果不需要在java中使类可继承,可以使用这种方法。
如果我们只需要让一个类中的特定方法不被覆盖,我们可以把final关键字放在它们前面。在那里类仍然是可继承的。
最好的例子是
公共最终类
这是一个不可变的类,不能扩展。 当然,不仅仅是使类final为不可变。
Be careful when you make a class "final". Because if you want to write an unit test for a final class, you cannot subclass this final class in order to use the dependency-breaking technique "Subclass and Override Method" described in Michael C. Feathers' book "Working Effectively with Legacy Code". In this book, Feathers said, "Seriously, it is easy to believe that sealed and final are a wrong-headed mistake, that they should never have been added to programming languages. But the real fault lies with us. When we depend directly on libraries that are out of our control, we are just asking for trouble."