Middle
Mik a különbségek a beágyazott (nested) és a belső (inner) osztályok között Java-ban?
sobes.tech MI
Válasz az MI-től
-
Beágyazott osztályok (Nested classes): A külső osztály statikus tagjai. Nincs közvetlen hozzáférésük a nem statikus tagokhoz (mezők és metódusok) a külső osztályban, csak a külső osztály példányán keresztül. A
statickulcsszóval vannak deklarálva. -
Belső osztályok (Inner classes): A külső osztály nem statikus tagjai. Teljes hozzáférést biztosítanak minden taghoz (statisztikus és nem statikus), beleértve a privátakat is. Egy belső osztály példányának létrehozásához szükség van a külső osztály példányára. Nem használják a
statickulcsszót.
Példa:
// Külső osztály
class Outer {
private int outerField = 10;
private static int staticOuterField = 20;
// Statikus beágyazott osztály
static class StaticNestedClass {
void display() {
// Csak a külső osztály statikus tagjaihoz fér hozzá
System.out.println("Statikus beágyazott: " + staticOuterField);
// Nincs közvetlen hozzáférés az outerField-hez
// System.out.println(outerField); // Fordítási hiba
}
}
// Nem statikus belső osztály
class InnerClass {
void display() {
// Minden külső osztály taghoz hozzáfér
System.out.println("Belső: " + outerField);
System.out.println("Belső (statikus): " + staticOuterField);
}
}
}
// Használat
public class Main {
public static void main(String[] args) {
// Statikus belső osztály példányának létrehozása
Outer.StaticNestedClass staticNested = new Outer.StaticNestedClass();
staticNested.display();
// Belső osztály példányának létrehozása külső osztály példányát igényli
Outer outer = new Outer();
Outer.InnerClass inner = outer.new InnerClass();
inner.display();
}
}
| Jellemző | Beágyazott osztály (Nested Class) | Belső osztály (Inner Class) |
|---|---|---|
| Kulcsszó | static |
Nem |
| Hozzáférés a külső osztály tagjaihoz | Csak statikusak | Minden |
| Külső osztály példánya nélkül példányosítható? | Nem | Igen |
| Kapcsolat a külső osztály példányával | Nem | Igen |