почему finalize() автоматически не вызывает родительский finalize(), как конструктор в java?

Я переопределил метод finalize(), чтобы выполнить некоторую работу при восстановлении пространства памяти объектов. Но кто-то говорит, что я должен вызывать родительский finalize() в переопределении метода finalize(). Но конструктор автоматически вызывает это конструктор суперкласса в отличие от метода finalize().

Можете ли вы просветить меня что-нибудь об этом...?


person Saravanan    schedule 23.01.2013    source источник
comment
Также стоит прочитать: stackoverflow.com/questions/ 158174/   -  person assylias    schedule 23.01.2013


Ответы (1)


Это определено таким образом в Спецификации языка Java № 12.6. (выделено мной):

Метод finalize, объявленный в классе Object, не выполняет никаких действий. Тот факт, что класс Object объявляет метод finalize, означает, что метод finalize для любого класса всегда может вызывать метод finalize для своего суперкласса. Это следует делать всегда, если только программист не намерен аннулировать действия финализатора в суперклассе. (В отличие от конструкторов, финализаторы не вызывают автоматически финализатор для суперкласса; такой вызов должен быть закодирован явно.)

person assylias    schedule 23.01.2013
comment
+1, потому что finalize() - это метод, а методы по умолчанию не вызывают реализации своего суперкласса. Данного finalize следует избегать, где это возможно, добавляя специальное поведение, поскольку это также вряд ли будет хорошей идеей. - person Peter Lawrey; 23.01.2013