สืบทอดคลาสที่ซ้อนกัน - 1

“สวัสดี อามีโก้!”

"สวัสดีคิม"

"ฉันต้องการบอกคุณเกี่ยวกับการสืบทอดคลาสที่ซ้อนกันแบบคงที่และไม่คงที่"

"ฉันพร้อมแล้ว."

"ไม่มีปัญหาใด ๆ กับการสืบทอดคลาสที่ซ้อนกันแบบสแตติก พวกเขาได้รับการสืบทอดเช่นเดียวกับคลาสทั่วไป:"

ตัวอย่าง
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 โดยไม่มีพารามิเตอร์ใดๆ โปรแกรมก็จะไม่ยอมคอมไพล์ แปลกนิดหน่อยใช่ไหม"

"ใช่ มีความแตกต่างเล็กน้อย แต่มันไม่ใช่วิทยาศาสตร์จรวด"