มรดกจาวา
การสืบทอด Java (ซับคลาสและซูเปอร์คลาส)
ใน Java เป็นไปได้ที่จะสืบทอดแอตทริบิวต์และเมธอดจากคลาสหนึ่งไปยังอีกคลาสหนึ่ง เราจัดกลุ่ม "แนวคิดการสืบทอด" ออกเป็นสองประเภท:
- คลาสย่อย (ลูก) - คลาสที่สืบทอดมาจากคลาสอื่น
- superclass (parent) - คลาสที่สืบทอดมาจาก
หากต้องการสืบทอดจากคลาส ให้ใช้extends
คีย์เวิร์ด
ในตัวอย่างด้านล่างCar
คลาส (คลาสย่อย) สืบทอดแอตทริบิวต์และเมธอดจากVehicle
คลาส (ซูเปอร์คลาส):
ตัวอย่าง
class Vehicle {
protected String brand = "Ford"; // Vehicle attribute
public void honk() { // Vehicle method
System.out.println("Tuut, tuut!");
}
}
class Car extends Vehicle {
private String modelName = "Mustang"; // Car attribute
public static void main(String[] args) {
// Create a myCar object
Car myCar = new Car();
// Call the honk() method (from the Vehicle class) on the myCar object
myCar.honk();
// Display the value of the brand attribute (from the Vehicle class) and the value of the modelName from the Car class
System.out.println(myCar.brand + " " + myCar.modelName);
}
}
คุณสังเกตเห็นการprotected
ปรับเปลี่ยนในยานพาหนะหรือไม่?
เราตั้งค่าแอตทริบิวต์แบรนด์ ใน ยานพาหนะเป็น ตัวแก้ไข การprotected
เข้าถึง หากตั้งค่าprivate
เป็น คลาสรถจะไม่สามารถเข้าถึงได้
ทำไมและเมื่อใดจึงควรใช้ "มรดก"?
- มีประโยชน์สำหรับการนำโค้ดกลับมาใช้ใหม่: ใช้แอตทริบิวต์และวิธีการของคลาสที่มีอยู่ซ้ำเมื่อคุณสร้างคลาสใหม่
เคล็ดลับ:ดูบทต่อไปด้วยPolymorphismซึ่งใช้วิธีการที่สืบทอดมาเพื่อทำงานต่างๆ
คำสำคัญสุดท้าย
ถ้าคุณไม่ต้องการให้คลาสอื่นสืบทอดจากคลาส ให้ใช้final
คีย์เวิร์ด:
หากคุณพยายามเข้าถึงfinal
คลาส Java จะสร้างข้อผิดพลาด:
final class Vehicle {
...
}
class Car extends Vehicle {
...
}
ผลลัพธ์จะเป็นดังนี้:
Main.java:9: error: cannot inherit from final Vehicle
class Main extends
Vehicle {
^
1 error)