1

次のコードでは、出力 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

4 に答える 4

4

protectedスコープには、パッケージだけでなく、クラスとサブクラスも含まれます。両方のクラスが同じパッケージの一部です。

finalize()ところで、電話するつもりがないことを願っています。それはガベージコレクターに任せるべきです(そして、頼りにしないでください!)。詳細については、この回答を参照してください。

于 2012-10-11T08:29:47.960 に答える
0

protected同じパッケージでメソッドを可視化する

これは役立つかもしれません:クラスのメンバーへのアクセスを制御する

于 2012-10-11T08:30:11.600 に答える
0

保護されたメンバーは、それ自身のクラスのメンバー、そのクラスのサブクラス、または同じパッケージのクラスからのみアクセスできます。

ここから

于 2012-10-11T08:30:23.777 に答える
0

SampleProject.javapackage 内にというファイルがありますsampleprojectSampleProjectSampleProject.java には、とという 2 つのクラスが定義されていSampleます。そのため、ファイル SampleProject.java をコンパイルするSampleProject.classSample.class、同じフォルダーに と が表示されます。したがって、それらは同じパッケージ内にあります(コンパイラは のようにパッケージを挿入するsamplepackageためSample.class、メソッドの呼び出しはfinalize成功します。

于 2012-10-11T08:38:44.917 に答える