หลักการมีอยู่ว่าเมื่อใดที่เรา 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 หรือไม่ ถ้าหากมีก็ทำงานตรงนั้นก่อน
ไม่มีความคิดเห็น:
แสดงความคิดเห็น