public class MyThisTest {
private int a;
public MyThisTest() {
this(42); // calls the other constructor
}
public MyThisTest(int a) {
this.a = a; // assigns the value of the parameter a to the field of the same name
}
สมมุติผมสร้าง object ขึ้นมา ผมสงสัยว่าถ้าหากมี MyThisTest อีกหนึ่ง constructor จะเกิดอะไรขึ้นครับ
แล้วการสร้่าง constructor ชื่อเดิมๆ หลายตัวมีประโยชน์รึปล่าวครับหรือแทบไม่จำเป็นต้องใช้เลย
ก็ได้ Construtor เพิ่มอีก 1 ตัวไงครับ
ข้อดีเหรอครับ ก้ประมาณว่าเป็นการกำหนด Default ของ Paremeter ได้อ่ะครับ
เช่นอย่างของคุณ ประกาศได้ 2 แบบคือ
MyThisTest obj = new MyThisTest();
// ถ้าประกาศแบบนี้ค่า a ของ class จะเป็น 42 ตามนิยามของ MyThisTest() ที่ไปเรียก ตัวเองและส่งค่า 42 ลงไป
แต่ถ้าประกาศเป็น
MyThisTest obj = new MyThisTest(1);
// ถ้าประกาศแบบนี้ค่า a ของ class จะเป็น 1 ตามนิยามของ MyThisTest(int a)
Constructor สร้างได้ชื่อเดียวครับ คือเหมือนกับคลาส จะต่างกันได้ก็แค่ Parameter ครับ
ถ้าหากมี
public MyThisTest () {this(42);}
public MyThisTest(int a) { this.a = a;}
public MyThisTest () {this(99);}
public MyThisTest () {this(18);}
public MyThisTest(int b) { this.b = b;}
จะเกิดอะไรขึ้นครับ ตัวใหนจะชี้ไปตัวใหนครับ
จากตัวอย่างที่ยกมาจะ error ครับ ใช้ไม่ได้เพราะมี ctor ที่มี signature ซ้ำกัน
โดย compiler จะแยกว่าใช้ ctor ตัวใดจาก parameter ครับ
เช่น มี ctor 3 ตัว
public MyThisTest ()
public MyThisTest (int)
public MyThisTest (int, int)
หากเรียกใช้ MyThisTest(10,20) มันก็จะไปเรียกใช้ ctor ตัวที่ 3
หากเรียกใช้ MyThisTest(10) มันก็จะไปเรียกใช้ ctor ตัวที่ 2
รบกวนถามการ nested class ครับ
class Outer
1) Outer.this <-----หมายถึง object ที่สร้างจากคลาส Outer หรือ Inner ครับ
2) nested class ตามข้างบนจะทำให้เกิดอะไรขึ้นครับ
1) หมายถึง object ของ Outer ครับ
2) nest class ปกติใช้เพื่อ group class ที่เกี่ยวข้องกันมาไว้ที่เดียวกันครับ จะได้อ่านง่ายและดูแลง่าย
ขอบคุณครับ
การ point object เราทำได้เฉพาะกับ object 2 ตัวที่มาจากคลาสเดียวกันเท่านั้น หรือไม่ครับ
หมายถึงการใช้ Outer.this แบบนี้เหรอครับ ถ้าเป็นการใช้งานรูปแบบนี้ class ที่จะเรียกใช้ได้ต้องเป็น nest class เท่านั้น