"Hei, Amigo!"
"Hei, Kim."
"Jeg vil fortelle deg om å arve statiske og ikke-statiske nestede klasser."
"Jeg er klar."
"Det er egentlig ingen problemer med å arve statiske nestede klasser. De arves akkurat som vanlige klasser:"
public class Car
{
public static class Door
{
}
}
public class LamborghiniDoor extends Car.Door
{
}
"Men kan vi få statiske nestede klasser til å arve statiske nestede klasser i andre klasser?"
"Hvorfor ikke?"
public class Car
{
public static class Door
{
}
}
public class Lamborghini extends Car
{
public static class LamborghiniDoor extends Car.Door
{
}
}
"OK, skjønner. De er arvet akkurat som vanlige klasser, ikke sant?"
"Ja. Men ikke-statiske nestede klasser (kjent som indre klasser) arves ikke like lett."
"Når en forekomst av en indre klasse opprettes, lagres en referanse til dens ytre klasse og overføres implisitt til konstruktøren."
"Som et resultat, når du oppretter objekter av en klasse som arver en indre klasse, må du sende det nødvendige ytre objektet eksplisitt."
"Slik ser det ut:"
public class Car
{
public class Door
{
}
}
public class LamborghiniDoor extends Car.Door
{
LamborghiniDoor(Car car)
{
car.super();
}
}
"Du må implisitt sende et bilobjekt til dørkonstruktøren. Dette gjøres ved å bruke en spesiell konstruksjon: «car.super()»."
"Forresten, hvis du prøver å lage LamborghiniDoor-konstruktøren uten noen parametere, vil programmet rett og slett ikke kompilere. Litt rart, ikke sant?"
"Ja, det er et par nyanser, men det er ikke rakettvitenskap."
GO TO FULL VERSION