"Hej, Amigo!"
"Hej Kim."
"Jag vill berätta om hur man ärver statiska och icke-statiska kapslade klasser."
"Jag är redo."
"Det finns egentligen inga problem med att ärva statiska kapslade klasser. De ärvs precis som vanliga klasser:"
public class Car
{
public static class Door
{
}
}
public class LamborghiniDoor extends Car.Door
{
}
"Men kan vi få statiska kapslade klasser att ärva statiska kapslade klasser i andra klasser?"
"Varför inte?"
public class Car
{
public static class Door
{
}
}
public class Lamborghini extends Car
{
public static class LamborghiniDoor extends Car.Door
{
}
}
"OK, förstår. De ärvs precis som vanliga klasser, eller hur?"
"Ja. Men icke-statiska kapslade klasser (kända som inre klasser) ärvs inte lika lätt."
"När en instans av en inre klass skapas, lagras en referens till dess yttre klass och skickas implicit vidare till konstruktorn."
"Som ett resultat, när du skapar objekt av en klass som ärver en inre klass, måste du skicka det erforderliga yttre objektet explicit."
"Så här ser det ut:"
public class Car
{
public class Door
{
}
}
public class LamborghiniDoor extends Car.Door
{
LamborghiniDoor(Car car)
{
car.super();
}
}
"Du måste implicit skicka ett bilobjekt till dörrkonstruktören. Detta görs med en speciell konstruktion: «car.super()»."
"Förresten, om du försöker skapa LamborghiniDoor-konstruktören utan några parametrar, kommer programmet helt enkelt inte att kompilera. Lite konstigt, va?"
"Ja, det finns ett par nyanser, men det är inte raketvetenskap."
GO TO FULL VERSION