“สวัสดี อามีโก้!”
"สวัสดีคิม"
"ฉันต้องการบอกคุณเกี่ยวกับการสืบทอดคลาสที่ซ้อนกันแบบคงที่และไม่คงที่"
"ฉันพร้อมแล้ว."
"ไม่มีปัญหาใด ๆ กับการสืบทอดคลาสที่ซ้อนกันแบบสแตติก พวกเขาได้รับการสืบทอดเช่นเดียวกับคลาสทั่วไป:"
public class Car
{
public static class Door
{
}
}
public class LamborghiniDoor extends Car.Door
{
}
"แต่เราสามารถสร้างคลาสที่ซ้อนกันแบบสแตติกสืบทอดคลาสที่ซ้อนแบบสแตติกในคลาสอื่นได้หรือไม่"
"ทำไมจะไม่ล่ะ?"
public class Car
{
public static class Door
{
}
}
public class Lamborghini extends Car
{
public static class LamborghiniDoor extends Car.Door
{
}
}
“ตกลง เข้าใจแล้ว พวกเขาสืบทอดมาเหมือนกับคลาสปกติใช่ไหม?”
"ใช่ แต่คลาสที่ซ้อนกันแบบไม่คงที่ (เรียกว่าคลาสภายใน) นั้นไม่ได้รับการสืบทอดอย่างง่ายดาย"
"เมื่อมีการสร้างอินสแตนซ์ของคลาสภายใน การอ้างอิงถึงคลาสภายนอกจะถูกเก็บไว้และส่งผ่านไปยังคอนสตรัคเตอร์โดยปริยาย"
"ดังนั้น เมื่อคุณสร้างออบเจกต์ของคลาสที่สืบทอดคลาสภายใน คุณต้องผ่านออบเจกต์ภายนอกที่จำเป็นอย่างชัดเจน"
"นี่คือลักษณะ:"
public class Car
{
public class Door
{
}
}
public class LamborghiniDoor extends Car.Door
{
LamborghiniDoor(Car car)
{
car.super();
}
}
"คุณต้องส่งวัตถุ Car ไปยังตัวสร้างประตูโดยปริยาย ซึ่งทำได้โดยใช้โครงสร้างพิเศษ: «car.super()»"
"อย่างไรก็ตาม ถ้าคุณพยายามสร้างตัวสร้าง LamborghiniDoor โดยไม่มีพารามิเตอร์ใดๆ โปรแกรมก็จะไม่ยอมคอมไพล์ แปลกนิดหน่อยใช่ไหม"
"ใช่ มีความแตกต่างเล็กน้อย แต่มันไม่ใช่วิทยาศาสตร์จรวด"
GO TO FULL VERSION