rectangle-terminalJava

  • สนับสนุน OOP แต่ยังคงใช้โครงสร้างพื้นฐานแบบภาษา imperative (รากฐานจากภาษา C++) เป็นภาษา OOP ที่บังคับใช้แนวคิด OOP อย่างเคร่งครัด

  • คลาสและวัตถุ: ทุกอย่างใน Java จะอยู่ภายในคลาส

  • การสืบทอด: ใช้ extends สำหรับการสืบทอด

  • การใช้ interface: ใช้ implements สำหรับการใช้ interface

  • การจัดการหน่วยความจำ: มี garbage collector ที่จัดการหน่วยความจำโดยอัตโนมัติ

ตัวอย่าง:

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