Java oferuje różnorodne typy klas wewnętrznych, które pozwalają na efektywne zarządzanie przestrzenią nazw i lepszą organizację kodu. Dwie z nich to klasy wewnętrzne typu Member oraz Local. Te dwa typy różnią się zakresem, sposobem deklaracji oraz dostępnością.
Przykład kodu z klasą wewnętrzną Member i Local
Poniżej przedstawiam przykład, który ilustruje zastosowanie obu tych klas:
// Klasa zewnętrzna
public class OuterClass {
private String outerField = "Zewnętrzne pole";
// Klasa wewnętrzna typu Member
class MemberInner {
void display() {
// Dostęp do pola klasy zewnętrznej
System.out.println(outerField);
}
}
void testClasses() {
// Instancja klasy wewnętrznej Member
MemberInner member = new MemberInner();
member.display();
// Klasa wewnętrzna typu Local w metodzie
class LocalInner {
void display() {
// Dostęp do pola klasy zewnętrznej
System.out.println(outerField + " (lokalne)");
}
}
// Instancja klasy wewnętrznej Local
LocalInner local = new LocalInner();
local.display();
}
public static void main(String[] args) {
OuterClass outer = new OuterClass();
outer.testClasses();
}
}
Komentarze do kodu
- Klasa wewnętrzna Member (MemberInner):
- Jest to niestatyczna klasa zdefiniowana na poziomie innego obiektu.
- Może dostępować do wszystkich pól i metod klasy zewnętrznej, niezależnie od ich modyfikatorów dostępu.
- Klasa wewnętrzna Local (LocalInner):
- Zdefiniowana wewnątrz metody i nie jest widoczna poza tą metodą.
- Może korzystać z finalnych lub efektywnie finalnych zmiennych lokalnych z tej metody.
Podsumowanie
Klasy wewnętrzne typu Member i Local różnią się głównie zakresem i dostępnością. Member Inner Class może być używana wszędzie w klasie zewnętrznej i ma dostęp do wszystkich jej członków, podczas gdy Local Inner Class jest ograniczona do bloku, w którym została zdefiniowana, co zapewnia większą kontrolę nad widocznością i żywotnością instancji klasy. W praktyce wybór między tymi typami zależy od specyficznych potrzeb i struktury projektu.
Jeżeli chcesz przyśpieszyć swoją naukę tworzenia stron chciałbym polecić mój kurs video Java w którym nauczysz się tego języka od podstaw do zaawansowanych jego aspektów.