นอกเหนือจากคำสำคัญอื่น ๆ 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}