สนับสนุนโดย

วันอาทิตย์ที่ 9 ธันวาคม พ.ศ. 2561

constructor chain

ตัวอย่างนี้ผมจะพามาดูเส้นทางการทำงานของ constructor ว่ามันวิ่งทำงานจากตรงไหน ไปตรงไหน
หลักการมีอยู่ว่าเมื่อใดที่เรา new object อะไรก็แล้วแต่ โปรแกรมจะทำการไปเรียก constructor ก่อนเสมอ เช่นเรามี คลาส

A {
A(){}
}


แบบนี้ พอเราทำการ new A() ตัว constructor ก็จะโดนเรียกให้ทำงานทำงานที แต่ถ้าหากมีการ extends กันไปเป็นชั้นๆ เช่น

package myPackage;

class J {
    J() {
        System.out.println("J");
    }
}

class K extends J {
    K() {
        System.out.println("K");
    }
}

public class ConstructorChain {
    public static void main(String[] args) {
        new K();
    }
}


ผลการทำงาน
J
K

จะเห็นว่ามันไปวิ่งทำงานส่วนของ J ก่อน ทั้งที่เราทำการ new K() ชัดๆ นั่นเพราะว่าการเริ่มต้นทำงานนั้น เมื่อมีการ extends แล้วล่ะก็ โปรแกรมจะวิ่งไปหา class แม่เพื่อดูว่ามี constructor หรือไม่ ถ้าหากมีก็ทำงานตรงนั้นก่อน

ไม่มีความคิดเห็น:

แสดงความคิดเห็น