Czytałem o klasie wewnętrznej w Nauce Java. Znalazłem ten kodWewnętrzna klasa w Javie
class Animal{
class Brain{
}
}
Po kompilacji, javap 'Animal$Brain'
daje wyjście jako
Compiled from "Animal.java"class
Animal$Brain {
final Animal this$0;
Animal$Brain(Animal);
}
która wyjaśnia jak wewnętrzna klasa dostaje odniesienie do jego przykład załączając w wewnętrznej konstruktora klasy. Ale kiedy definiować wewnętrzną klasę jako prywatne jak ten
class Animal{
private class Brain{
}
}
następnie po kompilacji, javap 'Animal$Brain'
daje wyjście jako
Compiled from "Animal.java"
class Animal$Brain {
final Animal this$0;
}
Więc dlaczego jest wyjście inaczej? Dlaczego wewnętrzny konstruktor klasy nie jest wyświetlany? W tym drugim przypadku również klasa wewnętrzna otrzymuje odwołanie do otaczającej instancji klasy.
Domyślam się, że to dlatego, że publiczny konstruktor tej klasy już nie istnieje (nie możesz zrobić "nowego Animal(). New Brain();" teraz na zewnątrz). – Rogue