Junior
Какви са вложените класове?
sobes.tech AI
Отговор от AI
Вложените класове (nested classes) са класове, обявени вътре в друг клас. Те могат да бъдат статични (static nested classes) или нестатични (inner classes).
Статични вложени класове:
- Обявяват се с модификатора
static. - Не имат директен достъп до нестатичните членове на външния клас (само чрез екземпляр на външния клас).
- Могат да съдържат както статични, така и нестатични членове.
- Създават се без екземпляр на външния клас.
public class Outer {
private static int staticOuterVar = 10;
private int instanceOuterVar = 20;
public static class StaticNested {
// Има достъп до staticOuterVar
public void printStaticValue() {
System.out.println(staticOuterVar);
}
// Няма директен достъп до instanceOuterVar
// public void printInstanceValue() {
// System.out.println(instanceOuterVar); // Грешка при компилация
// }
}
}
Използване на статичен вложен клас:
// Пример за създаване на екземпляр на статичен вложен клас
Outer.StaticNested nestedObject = new Outer.StaticNested();
nestedObject.printStaticValue(); // Ще изведе 10
Нестатични вложени класове (Inner Classes):
- Обявяват се без модификатора
static. - Имат пълен достъп до всички членове на външния клас, включително частните.
- Не могат да съдържат статични членове (освен константи по време на компилация).
- За създаването им е необходим екземпляр на външния клас.
public class Outer {
private static int staticOuterVar = 10;
private int instanceOuterVar = 20;
public class Inner {
// Има достъп до staticOuterVar и instanceOuterVar
public void printValues() {
System.out.println(staticOuterVar); // Достъпно
System.out.println(instanceOuterVar); // Достъпно
}
}
}
Създаване на екземпляр на нестатичен вътрешен клас:
// Създаване на екземпляр на нестатичен вътрешен клас
Outer outerObject = new Outer();
Outer.Inner innerObject = outerObject.new Inner();
innerObject.printValues(); // Ще изведе 10 и 20
Предимства на използването на вложени класове:
- Логическа групиране: Класове, които се използват само от друг клас, могат да бъдат логически групирани вътре в него.
- Инкапсулация: Вложените класове имат достъп до частните членове на външния клас.
- Четливост и поддръжка: Кодът става по-организиран.
Типове нестатични вложени класове:
- Локални класове: Обявяват се вътре в метод.
- Анонимни класове: Класове без явно име, обикновено се използват за създаване на екземпляр на абстрактен клас, интерфейс или базов клас с преопределени методи.
Локален клас:
public class Outer {
public void myMethod() {
class LocalClass {
void display() {
System.out.println("Вътре в локалния клас");
}
}
LocalClass local = new LocalClass();
local.display();
}
}
Анонимен клас (пример с интерфейс):
interface Greeting {
void sayHello();
}
public class Outer {
public void greet() {
Greeting anonymousGreeting = new Greeting() {
@Override
public void sayHello() {
System.out.println("Здравей от анонимния клас!");
}
};
anonymousGreeting.sayHello();
}
}