ตัวสร้างโอเวอร์โหลดใน Java

Constructor Overloading คืออะไร Java?

Java การโอเวอร์โหลดตัวสร้างเป็นเทคนิคที่คลาสสามารถมีตัวสร้างจำนวนเท่าใดก็ได้ที่แตกต่างกันในรายการพารามิเตอร์ คอมไพลเลอร์สร้างความแตกต่างให้กับคอนสตรัคเตอร์เหล่านี้โดยคำนึงถึงจำนวนพารามิเตอร์ในรายการและประเภทของพารามิเตอร์เหล่านั้น

ตัวอย่างของ constructors ที่ถูกต้องสำหรับคลาส Account ได้แก่

Account(int a);
Account (int a,int b);
Account (String a,int b);

2 ตัวอย่าง: เพื่อทำความเข้าใจ Constructor Overloading ใน Java

ขั้นตอน 1) พิมพ์รหัสในตัวแก้ไข

class Demo{
      int  value1;
      int  value2;
      /*Demo(){
       value1 = 10;
       value2 = 20;
       System.out.println("Inside 1st Constructor");
     }*/
     Demo(int a){
      value1 = a;
      System.out.println("Inside 2nd Constructor");
    }
    Demo(int a,int b){
    value1 = a;
    value2 = b;
    System.out.println("Inside 3rd Constructor");
   }
   public void display(){
      System.out.println("Value1 === "+value1);
      System.out.println("Value2 === "+value2);
  }
  public static void main(String args[]){
    Demo d1 = new Demo();
    Demo d2 = new Demo(30);
    Demo d3 = new Demo(30,40);
    d1.display();
    d2.display();
    d3.display();
 }
}

ขั้นตอน 2) บันทึก คอมไพล์ และรันโค้ด

ขั้นตอน 3) ข้อผิดพลาด = ?. ลองและแก้ไขข้อผิดพลาดก่อนดำเนินการขั้นตอนต่อไป Java ตัวสร้างโอเวอร์โหลด

ขั้นตอน 4) ทุกชั้นเรียนมีค่าเริ่มต้น ตัวสร้างใน Java- ตัวสร้างโอเวอร์โหลดเริ่มต้น Java สำหรับ การสาธิตคลาส is การสาธิต()- ในกรณีที่คุณไม่ได้จัดเตรียมตัวสร้างนี้ คอมไพเลอร์จะสร้างมันให้คุณและเตรียมใช้งานตัวแปรให้เป็นค่าเริ่มต้น คุณอาจเลือกที่จะแทนที่ตัวสร้างเริ่มต้นนี้และเริ่มต้นตัวแปรให้เป็นค่าที่คุณต้องการดังที่แสดงในตัวอย่างที่ 1

แต่ถ้าคุณระบุ Constructor แบบพารามิเตอร์ เช่น Demo(int a) และต้องการใช้ Constructor เริ่มต้น Java Demo() คุณจำเป็นต้องระบุมัน

กล่าวอีกนัยหนึ่ง ในกรณีที่คอนสตรัคเตอร์โอเวอร์โหลดของคุณเข้ามา Java ถูกแทนที่ และคุณต้องการใช้ตัวสร้างเริ่มต้น Javaจำเป็นต้องระบุ

ขั้นตอน 5) ไม่มีข้อคิดเห็นบรรทัด # 4-8 บันทึก คอมไพล์ และรันโค้ด

ทำไมเราจึงต้องใช้ Constructor Overloading ใน Java?

การโอเวอร์โหลดคอนสตรัคเตอร์ใน Java อนุญาตให้มี constructor หลายตัวในคลาส โดยแต่ละตัวมีรายการพารามิเตอร์ที่แตกต่างกัน ช่วยเพิ่มความยืดหยุ่นและปรับปรุงประสิทธิภาพของโค้ด

  • ความยืดหยุ่นในการสร้างวัตถุ: การโอเวอร์โหลดตัวสร้างช่วยให้คุณสามารถเริ่มต้นวัตถุได้หลายวิธี ขึ้นอยู่กับจำนวนหรือประเภทของพารามิเตอร์
  • การใช้รหัสซ้ำ: คุณสามารถนำตรรกะของ constructor กลับมาใช้ใหม่ได้โดยการเรียก constructor ตัวหนึ่งจากอีกตัวหนึ่งโดยใช้คีย์เวิร์ด this()
  • ปรับปรุงความสามารถในการอ่าน: คอนสตรัคเตอร์ที่โอเวอร์โหลดช่วยให้โค้ดมีความชัดเจนมากขึ้นด้วยการเสนอตัวเลือกคอนสตรัคเตอร์ที่เฉพาะเจาะจงสำหรับความต้องการการเริ่มต้นที่แตกต่างกัน
  • การเริ่มต้นใช้งานแบบเริ่มต้นและกำหนดเอง: การโอเวอร์โหลดของตัวสร้างช่วยให้คุณสามารถสร้างวัตถุทั้งแบบเริ่มต้นและแบบกำหนดค่าเองได้อย่างง่ายดาย

คำถามที่พบบ่อย

นวกรรมิก เป็นวิธีการพิเศษที่ใช้ในการเริ่มต้นวัตถุที่สร้างขึ้นใหม่และถูกเรียกหลังจากจัดสรรหน่วยความจำสำหรับวัตถุแล้ว สามารถใช้เพื่อเริ่มต้นวัตถุให้เป็นค่าที่ต้องการหรือค่าเริ่มต้นในขณะที่สร้างวัตถุ ไม่จำเป็นสำหรับ coder ในการเขียน Constructor สำหรับคลาส

หากไม่มี Constructor ที่ผู้ใช้กำหนดไว้สำหรับคลาส คอมไพเลอร์จะเริ่มต้นตัวแปรสมาชิกให้เป็นค่าเริ่มต้น

  • ชนิดข้อมูลตัวเลขถูกตั้งค่าเป็น 0
  • ประเภทข้อมูลถ่านถูกตั้งค่าเป็นอักขระ null('\0')
  • ตัวแปรอ้างอิงถูกตั้งค่าเป็นโมฆะ

  1. มันมี ชื่อเดียวกัน เป็นชั้นเรียน
  2. ไม่ควรส่งคืนค่าที่ไม่เท่ากัน ถือเป็นโมฆะ

1 ตัวอย่าง: สร้าง Constructor ตัวแรกของคุณใน Java

ขั้นตอน 1) พิมพ์โปรแกรม constructor ต่อไปนี้ใน Java บรรณาธิการ.

class Demo{
      int  value1;
      int  value2;
      Demo(){
         value1 = 10;
         value2 = 20;
         System.out.println("Inside Constructor");
     }
 
     public void display(){
        System.out.println("Value1 === "+value1);
        System.out.println("Value2 === "+value2);
    }
 
   public static void main(String args[]){
       Demo d1 = new Demo();
      d1.display();
  }
}

ขั้นตอน 2) บันทึก รัน และคอมไพล์โปรแกรม Constructor Java และสังเกตผลลัพธ์

ผลลัพธ์ที่คาดหวัง:

Inside Constructor
Value1 === 10
Value2 === 20

พิจารณาสถานการณ์ที่คลาสพื้นฐานถูกขยายโดยลูก เมื่อใดก็ตามที่วัตถุของคลาสลูกถูกสร้างขึ้น ตัวสร้างของคลาสพาเรนต์จะถูกเรียกใช้ก่อน สิ่งนี้เรียกว่า การผูกมัดตัวสร้าง

3 ตัวอย่าง: เพื่อทำความเข้าใจการผูกมัดตัวสร้าง

ขั้นตอน 1) คัดลอกโค้ดต่อไปนี้ลงในตัวแก้ไข

class Demo{
   int  value1;
   int  value2;
    Demo(){
      value1 = 1;
      value2 = 2;
      System.out.println("Inside 1st Parent Constructor");
   }
   Demo(int a){
      value1 = a;
      System.out.println("Inside 2nd Parent Constructor");
   }
  public void display(){
     System.out.println("Value1 === "+value1);
     System.out.println("Value2 === "+value2);
  }
  public static void main(String args[]){
     DemoChild d1 = new DemoChild();
     d1.display();
  }
}
class DemoChild extends Demo{
    int value3;
    int value4;
    DemoChild(){
    //super(5);
     value3 = 3;
     value4 = 4;
    System.out.println("Inside the Constructor of Child");
    }
    public void display(){
      System.out.println("Value1 === "+value1);
      System.out.println("Value2 === "+value2);
      System.out.println("Value1 === "+value3);
      System.out.println("Value2 === "+value4);
   }
}

ขั้นตอน 2) เรียกใช้โค้ด เนื่องมาจากการเชื่อมโยงคอนสตรัคเตอร์ เมื่อวัตถุของคลาสย่อย DemoChild ถูกสร้างขึ้น คอนสตรัคเตอร์ Demo() ของคลาสหลักจะถูกเรียกใช้ก่อน จากนั้นคอนสตรัคเตอร์ DemoChild() ของคลาสย่อยจะถูกสร้างขึ้นในภายหลัง

ผลลัพธ์ที่คาดหวัง:

Inside 1st Parent Constructor
Inside the Constructor of Child
Value1 === 1
Value2 === 2
Value1 === 3
Value2 === 4

ขั้นตอน 3) คุณอาจสังเกตเห็นว่าตัวสร้างของการสาธิตคลาสหลักถูกแทนที่ จะเป็นอย่างไรถ้าคุณต้องการเรียก Constructor Demo(int a) ที่ถูกแทนที่ แทนที่จะเป็น Constructor Demo() เริ่มต้นเมื่ออ็อบเจ็กต์ลูกของคุณถูกสร้างขึ้น

ในกรณีเช่นนี้ คุณสามารถใช้คำสำคัญได้ “ สุดยอด” เพื่อเรียกตัวสร้างที่ถูกแทนที่ของคลาสพาเรนต์

ไวยากรณ์:-

super();
--or--
super(parameter list);

ตัวอย่าง: หากคอนสตรัคเตอร์ของคุณเป็นเช่นนั้น การสาธิต (ชื่อสตริง int a)คุณจะระบุ ซุปเปอร์(“Java”,5)- หากใช้คำสำคัญ super จะต้องเป็นโค้ดบรรทัดแรก ในตัวสร้างคลาสย่อย

ขั้นตอน 4) Uncomment Line # 26 และเรียกใช้โค้ด สังเกตผลลัพธ์

Output:

Inside 2nd Parent Constructor
Inside the Constructor of Child
Value1 === 5
Value2 === 0
Value1 === 3
Value2 === 4

สรุปโพสต์นี้ด้วย: