คำ หลัก superใช้ในสถานการณ์ต่างๆ ก่อนเริ่มโพสต์นี้ เราขอแนะนำให้คุณเรียนรู้เกี่ยวกับการสืบทอดใน Java เพื่อความเข้าใจที่ดีขึ้น
super คำหลักใน Java คืออะไร
Superคือคีย์เวิร์ดที่สามารถใช้เพื่อเรียกใช้เมธอดที่ถูกแทนที่ของ superclass รวมถึงอ้างถึงฟิลด์ที่ซ่อนอยู่ของ superclassทำไมและเมื่อใดจึงควรใช้คำหลัก super
คีย์เวิร์ด Java superมีการใช้งานที่ชัดเจนสามประการ- เข้าถึงสมาชิกข้อมูลของคลาสพาเรนต์เมื่อคลาสย่อยมีสมาชิกข้อมูลที่มีชื่อเดียวกันด้วย
- เรียกใช้ตัวสร้างเริ่มต้นหรือตัวสร้างพารามิเตอร์ของคลาสพาเรนต์ในคลาสย่อย
- เรียกใช้เมธอดคลาสพาเรนต์ในคลาสลูก ถ้าลูกมีเมธอดที่ถูกแทนที่
ตัวอย่างที่ 1 - เข้าถึงสมาชิกข้อมูลของผู้ปกครอง
ตัวอย่างที่ 1 แสดงให้เห็นว่าแอตทริบิวต์หรือสมาชิกข้อมูลของ คลาส ยานพาหนะสามารถเข้าถึงได้อย่างไรในคลาสย่อยประเภทรถยนต์ ตรวจสอบว่าคุณเรียกใช้ตัวอย่างข้อมูลด้านล่างเพื่อให้เข้าใจได้ดี
class Vehicle {
String name = "vehicle";
}
class Car extends Vehicle {
String name = "car";
public void printMyName() {
System.out.println(name);
}
public void printParentName() {
// use super keyword to access
// parent's data member / attribute
System.out.println(super.name);
}
public static void main(String[] args) {
Car myCar = new Car();
System.out.print("My Car's Name: ");
myCar.printMyName();
// printing the parent's name
// using the super keyword
System.out.print("My Parent Vehicle's Name: ");
myCar.printParentName();
}
}
เอาต์พุต
ชื่อรถของฉัน: รถ แม่ของฉัน ชื่อรถ: ยานพาหนะ
ตัวอย่างที่ 2 - เข้าถึงคอนสตรัคเตอร์ของพาเรนต์ในคลาสย่อย
การเรียก super()อย่างชัดเจนช่วยให้คุณเข้าถึงทั้งตัวสร้างเริ่มต้นหรือตัวสร้างพารามิเตอร์ของคลาสพาเรนต์ในคลาสย่อย นี่คือตัวอย่างของตัวสร้างพารามิเตอร์ ตัวสร้างคลาส ie Shapeของพาเรนต์ถูกเรียก (โดยใช้super() ) ในคลาสย่อย ie Triangleเพื่อตั้งค่าแอตทริบิวต์ เรียกใช้โปรแกรมด้านล่างเพื่อทดสอบผลลัพธ์ด้วยตัวคุณเอง
public class Shape {
String name;
public Shape(String n) {
System.out.println("Shape() parameterized constructor called!");
name = n;
}
}
class Triangle extends Shape {
int sides = 3;
String color;
public Triangle(String n, String c) {
// The super keyword calls the parameterized
// constructor of the parent (Shape) with
// 'n' as a parameter
super(n);
System.out.println("Triangle() parameterized constructor called!");
this.color = c;
}
public static void main(String[] args) {
Triangle myTriangle = new Triangle("Triangle Alpha", "Yellow");
System.out.println(myTriangle.name);
System.out.println(myTriangle.color);
}
}
เอาต์พุต
Shape() ตัวสร้างพารามิเตอร์ที่เรียกว่า! ตัวสร้างพารามิเตอร์ Triangle() เรียกว่า! สามเหลี่ยมอัลฟ่าสีเหลือง
Quick Challenge : ออกแบบโปรแกรมด้านบนใหม่โดยใช้ตัวสร้างเริ่มต้นเพื่อทดสอบการเรียนรู้ของคุณ ดูว่าsuper()แตกต่างจากsuper(arg)อย่างไร
ตัวอย่างที่ 3 - เข้าถึงเมธอด overridden ของพาเรนต์ในคลาสย่อย
ตัวอย่างที่ 3 แสดงวิธีการเข้าถึงเมธอดของคลาสพาเรนต์ที่คลาสย่อยกำหนด คลาสพาเรนต์Soundในโปรแกรมด้านล่างกำหนดเมธอดvoice( ) Drumคลาสลูกยังมีเมธอดชื่อเดียวกันคือvoice( ) หมายความว่าเสียง เมธอด ถูกแทนที่โดยคลาสย่อย เรียกใช้โปรแกรมด้านล่างเพื่อเรียนรู้ว่าsuper keyword จำเป็นอย่างไรในการใช้เมธอดของคลาสพาเรนต์ในคลาสย่อย
public class Sound {
public void voice() {
System.out.println("Play sound!");
}
}
class Drum extends Sound {
public void voice() {
System.out.println("Play drums!");
}
public void play() {
// The super keyword calls the
// voice() method of the parent
super.voice();
voice();
}
public static void main(String[] args) {
Drum myDrum = new Drum();
myDrum.play();
}
}
เอาต์พุต
Shape() ตัวสร้างพารามิเตอร์ที่เรียกว่า! ตัวสร้างพารามิเตอร์ Triangle() เรียกว่า! สามเหลี่ยมอัลฟ่าสีเหลือง
GO TO FULL VERSION