„Hallo, Amigo!“
„Hallo, Kim.“
„Ich möchte Ihnen etwas über die Vererbung statischer und nicht statischer verschachtelter Klassen erzählen.“
"Ich bin bereit."
„Es gibt wirklich keine Probleme mit der Vererbung statischer verschachtelter Klassen. Sie werden genau wie reguläre Klassen vererbt:“
public class Car
{
public static class Door
{
}
}
public class LamborghiniDoor extends Car.Door
{
}
„Aber können wir statisch verschachtelte Klassen dazu bringen, statisch verschachtelte Klassen in anderen Klassen zu erben?“
"Warum nicht?"
public class Car
{
public static class Door
{
}
}
public class Lamborghini extends Car
{
public static class LamborghiniDoor extends Car.Door
{
}
}
„Okay, verstanden. Sie werden genau wie normale Klassen vererbt, oder?“
„Ja. Aber nicht statische verschachtelte Klassen (bekannt als innere Klassen) werden nicht so leicht vererbt.“
„Wenn eine Instanz einer inneren Klasse erstellt wird, wird ein Verweis auf ihre äußere Klasse gespeichert und implizit an den Konstruktor übergeben.“
„Wenn Sie also Objekte einer Klasse erstellen, die eine innere Klasse erbt, müssen Sie das erforderliche äußere Objekt explizit übergeben.“
„So sieht es aus:“
public class Car
{
public class Door
{
}
}
public class LamborghiniDoor extends Car.Door
{
LamborghiniDoor(Car car)
{
car.super();
}
}
„Sie müssen implizit ein Car-Objekt an den Door-Konstruktor übergeben. Dies geschieht mit einem speziellen Konstrukt: «car.super()».“
„Übrigens, wenn Sie versuchen, den LamborghiniDoor-Konstruktor ohne Parameter zu erstellen, lässt sich das Programm einfach nicht kompilieren. Ein bisschen seltsam, oder?“
„Ja, es gibt ein paar Nuancen, aber es ist kein Hexenwerk.“
GO TO FULL VERSION