2012-10-11 2 views
1

В следующем коде я получаю вывод Hello. Может ли кто-нибудь объяснить, почему компилятор не сообщает об ошибке, которую я вызываю защищенной функцией вне класса и цепочки наследования.Как я могу позвонить finalize()

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"); 
    } 
} 

Спасибо.

+1

Являются ли эти два класса в одном пакете? –

ответ

4

protected область включает в себя комплект , а также класс и подкласс (ы). Оба ваших класса являются частью одного и того же пакета.

Надеюсь, вы не намереваетесь позвонить finalize(), кстати. Это нужно оставить сборщику мусора (и не полагаться на это!). См. this answer для получения дополнительной информации.

0

защищен члены могут быть доступны только членам своего класса, подклассов этого класса или классов из тот же пакет.

От here

0

У вас есть файл с именем SampleProject.java внутри пакета sampleproject. SampleProject.java содержит два класса: SampleProject и Sample. Поэтому, когда вы компилируете файл SampleProject.java, вы увидите SampleProject.class и Sample.class в той же папке. Таким образом, они находятся в одном пакете (поскольку компилятор вставляет пакет как samplepackage для Sample.class, поэтому вызов метода finalize завершается успешно.

Смежные вопросы