我正在读一本关于Java的书,它说你可以将整个类声明为final。我想不出有什么地方可以用它。

我只是一个编程新手,我想知道程序员是否真的在他们的程序中使用这个。如果他们使用,他们什么时候使用,这样我就能更好地理解它,知道什么时候使用它。

如果Java是面向对象的,并且你声明了一个final类,难道它不会阻止类具有对象的特征吗?


当前回答

在java中,final关键字用于以下场合。

最后一个变量 最后的方法 最后的课程

在java中,final变量不能重赋,final类不能扩展,final方法不能重写。

其他回答

相关阅读:Bob Martin的《开闭原理》。

主要引用:

软件实体(类、模块、 函数等)应该是开放的 分机,但已关闭 修改。

最后一个关键字是在Java中强制执行的方法,无论是在方法上还是在类上。

final类可以避免在添加新方法时破坏公共API

假设在基类的版本1中:

public class Base {}

客户会这样做:

class Derived extends Base {
    public int method() { return 1; }
}

然后,如果在版本2中,你想添加一个方法method到Base:

class Base {
    public String method() { return null; }
}

这将破坏客户端代码。

如果我们使用final类Base,客户端就不能继承,方法的添加也不会破坏API。

是的,有时您可能需要这样做,无论是出于安全性还是速度原因。在c++中也可以做到。它可能不适用于程序,但更适用于框架。 http://www.glenmccl.com/perfj_025.htm

将一个类保留为最终类的一个好处是:-

String类保持为final,这样任何人都不能重写其方法并更改功能。例如,没有人可以改变length()方法的功能。它总是返回一个字符串的长度。

这个类的开发人员不希望任何人改变这个类的功能,所以他把它作为最终的。

final类是不能扩展的类。此外,方法可以声明为final,以表明不能被子类覆盖。

如果您编写api或库,并希望避免被扩展以改变基本行为,则防止类被子类化可能特别有用。