Junior
Czym są klasy zagnieżdżone?
sobes.tech AI
Odpowiedź od AI
Klasy zagnieżdżone to klasy zadeklarowane wewnątrz innej klasy. Dzielą się na dwa główne typy: klasy zagnieżdżone statyczne (członkowie statyczni klasy) i klasy wewnętrzne (członkowie niestatyczni).
Klasy zagnieżdżone statyczne:
- Są powiązane z klasą zewnętrzną, a nie z jej instancją.
- Mogą odwoływać się tylko do statycznych członków klasy zewnętrznej.
- Mogą być tworzone bez instancji klasy zewnętrznej.
Klasy wewnętrzne:
- Są powiązane z instancją klasy zewnętrznej.
- Mogą odwoływać się do wszystkich członków klasy zewnętrznej (statycznych i niestatycznych), w tym prywatnych.
- Wymagają instancji klasy zewnętrznej do ich utworzenia.
Przykłady użycia:
- Grupowanie: Logicznie powiązane klasy można łączyć, aby poprawić czytelność i organizację kodu.
- Enkapsulacja: Klasy wewnętrzne mają dostęp do prywatnych członków klasy zewnętrznej, co pozwala na enkapsulację szczegółów implementacji.
- Słuchacze zdarzeń (Java): Często używane do tworzenia anonimowych klas wewnętrznych.
- Klasy pomocnicze: Małe klasy używane tylko przez klasę zewnętrzną.
// Przykład klasy zagnieżdżonej statycznej
class OuterClass {
static int outerStaticField = 1;
int outerInstanceField = 2;
static class StaticNestedClass {
void display() {
System.out.println("Pole statyczne zewnętrzne: " + outerStaticField);
// Nie można bezpośrednio odwołać się do outerInstanceField
}
}
}
// Przykład klasy wewnętrznej
class AnotherOuterClass {
int outerField = 10;
class InnerClass {
void display() {
System.out.println("Pole zewnętrzne: " + outerField); // Dostęp do pola klasy zewnętrznej
}
}
}
Tabela porównawcza:
| Cecha | Klasa zagnieżdżona statyczna | Klasa wewnętrzna |
|---|---|---|
| Związek | Z klasą zewnętrzną | Z instancją klasy zewnętrznej |
| Dostęp do członków zewnętrznych | Tylko statyczne | Wszystkie członkowie (w tym prywatne) |
| Wymaga instancji | Nie | Tak |
| Może zawierać członków statycznych | Tak | Nie (z wyjątkiem stałych) |