
"Olá, amigo!"
"Oi, Kim."
"Quero falar sobre como herdar classes aninhadas estáticas e não estáticas."
"Estou pronto."
"Realmente não há problemas com a herança de classes aninhadas estáticas. Elas são herdadas como classes regulares:"
public class Car
{
public static class Door
{
}
}
public class LamborghiniDoor extends Car.Door
{
}
"Mas podemos fazer com que classes aninhadas estáticas herdem classes aninhadas estáticas em outras classes?"
"Por que não?"
public class Car
{
public static class Door
{
}
}
public class Lamborghini extends Car
{
public static class LamborghiniDoor extends Car.Door
{
}
}
"OK, entendi. Eles são herdados como classes regulares, certo?"
"Sim. Mas classes aninhadas não estáticas (conhecidas como classes internas) não são herdadas tão facilmente."
"Quando uma instância de uma classe interna é criada, uma referência à sua classe externa é armazenada e passada implicitamente para o construtor."
"Como resultado, quando você cria objetos de uma classe que herda uma classe interna, você deve passar explicitamente o objeto externo necessário."
"Isto é o que parece:"
public class Car
{
public class Door
{
}
}
public class LamborghiniDoor extends Car.Door
{
LamborghiniDoor(Car car)
{
car.super();
}
}
"Você deve passar implicitamente um objeto Car para o construtor Door. Isso é feito usando uma construção especial: «car.super()»."
"A propósito, se você tentar criar o construtor LamborghiniDoor sem nenhum parâmetro, o programa simplesmente não compilará. Um pouco estranho, hein?"
"Sim, existem algumas nuances, mas não é ciência de foguetes."
GO TO FULL VERSION