중첩 클래스 상속 - 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 객체를 Door 생성자에 암시적으로 전달해야 합니다. 이것은 «car.super()»라는 특수 구성을 사용하여 수행됩니다."

"그런데 매개 변수 없이 LamborghiniDoor 생성자를 만들려고 하면 프로그램이 컴파일되지 않습니다. 조금 이상하죠?"

"예, 몇 가지 뉘앙스가 있지만 로켓 과학은 아닙니다."