Junior
Mi az a beágyazott osztályok?
sobes.tech MI
Válasz az MI-től
Beágyazott osztályok (nested classes) olyan osztályok, amelyeket egy másik osztályon belül deklarálnak. Lehetnek statikusak (static nested classes) vagy nem statikusak (inner classes).
Statikus beágyazott osztályok:
- A
staticmódosítóval vannak deklarálva. - Nem férnek hozzá közvetlenül a külső osztály nem statikus tagjaihoz (csak a külső osztály példányán keresztül).
- Tartalmazhatnak mind statikus, mind nem statikus tagokat.
- Külső osztály példánya nélkül hozhatók létre.
public class Outer {
private static int staticOuterVar = 10;
private int instanceOuterVar = 20;
public static class StaticNested {
// Hozzáférés a staticOuterVar-hoz
public void printStaticValue() {
System.out.println(staticOuterVar);
}
// Nincs közvetlen hozzáférés az instanceOuterVar-hoz
// public void printInstanceValue() {
// System.out.println(instanceOuterVar); // Fordítási hiba
// }
}
}
Statikus beágyazott osztály példánya:
// Példa a statikus beágyazott osztály példányosítására
Outer.StaticNested nestedObject = new Outer.StaticNested();
nestedObject.printStaticValue(); // 10-et ír ki
Nem statikus belső osztályok (Inner Classes):
- Nincs
staticmódosítóval deklarálva. - Teljes hozzáférésük van a külső osztály összes tagjához, beleértve a privátakat is.
- Nem tartalmazhatnak statikus tagokat (kivéve a konstansokat).
- A külső osztály példányának létrehozása szükséges a példányosításhoz.
public class Outer {
private static int staticOuterVar = 10;
private int instanceOuterVar = 20;
public class Inner {
// Hozzáférés a staticOuterVar és az instanceOuterVar-hoz
public void printValues() {
System.out.println(staticOuterVar); // Elérhető
System.out.println(instanceOuterVar); // Elérhető
}
}
}
Nem statikus belső osztály példányosítása:
// Nem statikus belső osztály példányosítása
Outer outerObject = new Outer();
Outer.Inner innerObject = outerObject.new Inner();
innerObject.printValues(); // 10 és 20-at ír ki
A belső osztályok használatának előnyei:
- Logikai csoportosítás: Olyan osztályokat, amelyeket csak egy másik osztály használ, logikusan lehet csoportosítani benne.
- Encapsuláció: A belső osztályok hozzáférnek a külső osztály privát tagjaihoz.
- Olvashatóság és karbantartás: A kód rendezettebbé válik.
Nem statikus belső osztályok típusai:
- Helyi osztályok: Egy metóduson belül deklarálva.
- Anonim osztályok: Név nélküli osztályok, amelyeket általában absztrakt osztály, interfész vagy alap osztály példányosítására használnak, metódusok felülírásával.
Helyi osztály:
public class Outer {
public void myMethod() {
class LocalClass {
void display() {
System.out.println("Helyi osztályon belül");
}
}
LocalClass local = new LocalClass();
local.display();
}
}
Névtelen osztály (interfész példával):
interface Greeting {
void sayHello();
}
public class Outer {
public void greet() {
Greeting anonymousGreeting = new Greeting() {
@Override
public void sayHello() {
System.out.println("Üdvözlet névtelen osztályból!");
}
};
anonymousGreeting.sayHello();
}
}