Java
class Animal {
String name;
public Animal() {
System.out.println("create animal");
}
public Animal(String name) {
this.name = name;
System.out.println("create animal: " + name);
}
public void finalize() {
System.out.println("delete animal");
}
public void sound() {
System.out.println("animal makes a sound");
}
}
class Dog extends Animal {
public Dog() {
System.out.println("dog");
}
public void finalize() {
System.out.println("delete dog");
}
@Override
public void sound() {
System.out.println("dog barks");
}
}
class Cat extends Animal {
public Cat() {
System.out.println("cat");
}
public void finalize() {
System.out.println("delete cat");
}
@Override
public void sound() {
System.out.println("cat meows");
}
}
public class Main {
public static void main(String[] args) {
Animal a = new Animal();
Animal an = new Animal("MooDeng");
Dog d = new Dog();
Cat c = new Cat();
an = c;
a.sound();
an.sound();
d.sound();
c.sound();
System.gc();
}
}
/*การเรียกใช้ finalize(): GC จะทำการเรียก finalize() ของ object ที่กำลังถูกเก็บ (collect) เท่านั้น
ซึ่งการทำงานนี้ไม่ได้ถูกการันตีว่าจะเกิดขึ้นทันทีหลังจาก System.gc() ถูกเรียก
ในกรณีนี้, GC อาจเก็บแค่บาง object: Animal เพราะ object อื่น ๆ (Dog และ Cat)
อาจจะยังไม่ได้ถูกเก็บในหน่วยความจำ จึงไม่ได้เรียก finalize() ของ Dog และ Cat*/Last updated