"안녕, 아미고!"
"안녕, 김."
"정적 및 비정적 중첩 클래스 상속에 대해 말씀드리고 싶습니다."
"준비됐어."
"정적 중첩 클래스를 상속하는 데 실제로 문제가 없습니다. 일반 클래스처럼 상속됩니다."
예
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 생성자를 만들려고 하면 프로그램이 컴파일되지 않습니다. 조금 이상하죠?"
"예, 몇 가지 뉘앙스가 있지만 로켓 과학은 아닙니다."
GO TO FULL VERSION