最终方法会在没有覆盖的情况下运行吗?

时间:2014-04-25 07:50:37

标签: java finalize

现在我知道这是一个愚蠢的问题,但是,finalize方法在对象类中定义为受保护,并且它将在我们的类中私下继承。

并且我们知道finalize方法在对象被销毁之前运行,所以我的问题是,如果我们不覆盖它?它是否仍然以私有形式运行?

3 个答案:

答案 0 :(得分:1)

  

finalize方法在对象类和它中被定义为受保护   将在我们班上私下继承。

不,它不会作为私有继承到子类。

  

在没有覆盖的情况下完成方法运行吗?

是的,它会运行,因为它是继承的。

答案 1 :(得分:1)

您无法将finalize覆盖为私有。

如果您尝试,则会收到此错误:

Cannot reduce the visibility of the inherited method from Object.

我认为您应该尝试了解有关访问修饰符的更多信息。 protected永远不会(也不会)成为private

这有效:

protected void finalize() throws Throwable {
    // something
}

这也有效:

public void finalize() throws Throwable {
    // something
}

这不起作用:

private void finalize() throws Throwable {
    // something
}

阅读这个答案:In Java, what's the difference between public, default, protected, and private?

答案 2 :(得分:0)

是的,即使您没有用自己的实现覆盖它,finalize()方法仍然会运行。