37

假设我在 Java 类中有一个方法,并且我不希望该类的任何子类能够覆盖该方法。我可以这样做吗?

4

3 回答 3

62

您可以将方法声明为final,如下所示:

public final String getId() {
   ...
}

有关详细信息,请参阅http://docs.oracle.com/javase/tutorial/java/IandI/final.html

于 2012-10-22T23:32:19.303 回答
9

只需将方法设为 final即可。

于 2012-10-22T23:32:30.110 回答
4

如果您的方法不是您构建的 API 的一部分并且没有被子类直接调用,则更喜欢简单地创建您的方法private

如果您的类层次结构包含在单个包中,请将您的方法置于包范围内(没有范围关键字)。因此,只有外部世界(包括您自己的其他软件包)无法访问它,因此无法覆盖它。

如果您的方法不是 API 的真正组成部分,但必须被子类甚至外部可见,则更喜欢 make itprotectedfinal

最后,如果您的方法是 API 的一部分,请将其设置publicfinal.

于 2012-10-22T23:38:12.300 回答