我怎么能调用finalize()

时间:2012-10-11 08:27:54

标签: java protected finalize

在下面的代码中,我得到输出Hello。任何人都可以解释为什么编译器没有报告错误它我在类和继承链之外调用受保护的函数。

package sampleproject;

public class SampleProject 
{
    public static void main(String[] args) 
    {
        Sample s=new Sample();
        s.finalize();
    }
}

class Sample
{
    @Override
    protected void finalize()
    {
        System.out.println("Hello");
    }
}

感谢。

4 个答案:

答案 0 :(得分:4)

protected范围包括,以及类和子类。你的两个类都属于同一个包。

我希望你不打算打电话给finalize(),顺便说一下。这应该留给垃圾收集器(并且不依赖,或者!)。有关详细信息,请参阅this answer

答案 1 :(得分:0)

protected使方法在同一个包中可见

这可能会有所帮助:Controlling Access to Members of a Class

答案 2 :(得分:0)

  

受保护成员只能由自己的班级成员访问,   该类的子类或来自同一包的类。

来自here

答案 3 :(得分:0)

您在包SampleProject.java中有一个名为sampleproject的文件。 SampleProject.java包含两个定义的类,即SampleProjectSample。因此,在编译SampleProject.java文件时,您会在同一文件夹中看到SampleProject.classSample.class。所以它们在同一个包中(因为编译器为samplepackage插入包Sample.class,因此调用finalize方法成功。