Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

ความแตกต่างระหว่าง super() และ this() ใน Java Program


นอกเหนือจากคำสำคัญอื่น ๆ Java ยังให้คำนี้และ super เป็นคำสำคัญพิเศษซึ่งส่วนใหญ่ใช้เพื่อแสดงอินสแตนซ์ปัจจุบันของคลาสและเป็น super class ตามลำดับ ด้วยความคล้ายคลึงกันนี้ คำหลักทั้งสองนี้จึงมีความแตกต่างที่สำคัญระหว่างกัน โดยมีรายการดังต่อไปนี้ -

ซีเนียร์ เลขที่ คีย์ นี่ สุดยอด
1 เป็นตัวแทนและอ้างอิง คีย์เวิร์ดนี้แสดงถึงอินสแตนซ์ปัจจุบันของคลาสเป็นหลัก ในทางกลับกัน คีย์เวิร์ด super แสดงถึงอินสแตนซ์ปัจจุบันของคลาสพาเรนต์
2 การโต้ตอบกับตัวสร้างคลาส คีย์เวิร์ดนี้ใช้เพื่อเรียกคอนสตรัคเตอร์เริ่มต้นของคลาสเดียวกัน ซูเปอร์คีย์เวิร์ดใช้เพื่อเรียกคอนสตรัคเตอร์เริ่มต้นของคลาสพาเรนต์
3 วิธีการเข้าถึง คีย์เวิร์ดนี้ใช้เพื่อเข้าถึงเมธอดของคลาสปัจจุบันเนื่องจากมีการอ้างอิงคลาสปัจจุบัน สามารถเข้าถึง method ของ parent class ได้โดยใช้ super keyword
4 บริบทคงที่ คีย์เวิร์ดนี้สามารถอ้างอิงได้จากบริบทแบบคงที่ เช่น สามารถเรียกใช้จากอินสแตนซ์แบบคงที่ได้ ตัวอย่างเช่น เราสามารถเขียน System.out.println(this.x) ซึ่งจะพิมพ์ค่าของ x โดยไม่มีข้อผิดพลาดในการรวบรวมหรือรันไทม์ ในทางกลับกัน ซูเปอร์คีย์เวิร์ดไม่สามารถอ้างอิงจากบริบทแบบคงที่ได้ นั่นคือไม่สามารถเรียกใช้จากอินสแตนซ์แบบคงที่ได้ ตัวอย่างเช่น เราไม่สามารถเขียน System.out.println(super.x) ได้ ซึ่งจะทำให้เกิดข้อผิดพลาดในการรวบรวมเวลา

ตัวอย่างนี้เทียบกับ super

Equals.jsp

class A {
   public int x, y;
   public A(int x, int y) {
      this.x = x;
      this.y = y;
   }
}
class B extends A {
   public int x, y;
   public B() {
      this(0, 0);
   }
   public B(int x, int y) {
      super(x + 1, y + 1);// calls parent class constructor
      this.x = x;
      this.y = y;
   }
   public void print() {
      System.out.println("Base class : {" + x + ", " + y + "}");
      System.out.println("Super class : {" + super.x + ", " + super.y + "}");
   }
}
class Point {
   public static void main(String[] args) {
      B obj = new B();
      obj.print();
      obj = new B(1, 2);
      obj.print();
   }
}

ผลผลิต

Base class : {0, 0}
Super class : {1, 1}

Base class : {1, 2}
Super class : {2, 3}