Middle
Jakie są różnice między klasami zagnieżdżonymi (nested) a klasami wewnętrznymi (inner) w Java?
sobes.tech AI
Odpowiedź od AI
-
Klasy zagnieżdżone (Nested classes): Statyczne członki klasy zewnętrznej. Nie mają bezpośredniego dostępu do członków niestatycznych (pól i metod) klasy zewnętrznej, tylko przez instancję klasy zewnętrznej. Są deklarowane słowem kluczowym
static. -
Klasy wewnętrzne (Inner classes): Niestatyczne członki klasy zewnętrznej. Mają pełny dostęp do wszystkich członków (statycznych i niestatycznych) klasy zewnętrznej, w tym prywatnych. Do tworzenia instancji klasy wewnętrznej potrzebna jest instancja klasy zewnętrznej. Nie używają słowa kluczowego
static.
Przykład:
// Klasa zewnętrzna
class Outer {
private int outerField = 10;
private static int staticOuterField = 20;
// Statyczna klasa zagnieżdżona
static class StaticNestedClass {
void display() {
// Dostęp tylko do statycznych członków klasy zewnętrznej
System.out.println("Statyczna klasa zagnieżdżona: " + staticOuterField);
// Brak bezpośredniego dostępu do outerField
// System.out.println(outerField); // Błąd kompilacji
}
}
// Klasa wewnętrzna niestatyczna
class InnerClass {
void display() {
// Dostęp do wszystkich członków klasy zewnętrznej
System.out.println("Wewnętrzna: " + outerField);
System.out.println("Wewnętrzna (statyczna): " + staticOuterField);
}
}
}
// Użycie
public class Main {
public static void main(String[] args) {
// Tworzenie instancji klasy zagnieżdżonej statycznej
Outer.StaticNestedClass staticNested = new Outer.StaticNestedClass();
staticNested.display();
// Tworzenie instancji klasy wewnętrznej wymaga instancji klasy zewnętrznej
Outer outer = new Outer();
Outer.InnerClass inner = outer.new InnerClass();
inner.display();
}
}
| Cecha | Klasa zagnieżdżona (Nested Class) | Klasa wewnętrzna (Inner Class) |
|---|---|---|
| Słowo kluczowe | static |
Nie |
| Dostęp do członków klasy zewnętrznej | Tylko statyczne | Wszystkie |
| Wymaga instancji klasy zewnętrznej do utworzenia | Nie | Tak |
| Powiązanie z instancją klasy zewnętrznej | Nie | Tak |