Middle
Фарқият байни синфҳои дарунсохт (nested) ва дохилӣ (inner) дар Java чист?
sobes.tech AI
Ҷавоб аз AI
-
Класи вътре (Nested classes): Статични членове на външния клас. Нямат директен достъп до нестатичните членове (поля и методи) на външния клас, само чрез екземпляр на външния клас. Обявяват се с ключовата дума
static. -
Вътрешни класове (Inner classes): Нестатични членове на външния клас. Имат пълен достъп до всички членове (статични и нестатични) на външния клас, включително частните. За създаване на екземпляр на вътрешен клас е необходим екземпляр на външния клас. Не използват ключовата дума
static.
Пример:
// Външен клас
class Outer {
private int outerField = 10;
private static int staticOuterField = 20;
// Статичен вътрешен клас
static class StaticNestedClass {
void display() {
// Достъп само до статичните членове на външния клас
System.out.println("Static nested: " + staticOuterField);
// Няма директен достъп до outerField
// System.out.println(outerField); // Грешка при компилация
}
}
// Нестатичен вътрешен клас
class InnerClass {
void display() {
// Достъп до всички членове на външния клас
System.out.println("Inner: " + outerField);
System.out.println("Inner (static): " + staticOuterField);
}
}
}
// Използване
public class Main {
public static void main(String[] args) {
// Създаване на екземпляр на статичния вътрешен клас
Outer.StaticNestedClass staticNested = new Outer.StaticNestedClass();
staticNested.display();
// Създаване на екземпляр на вътрешния клас изисква екземпляр на външния клас
Outer outer = new Outer();
Outer.InnerClass inner = outer.new InnerClass();
inner.display();
}
}
| Особеност | Вътрешен клас (Nested Class) | Вътрешен клас (Inner Class) |
|---|---|---|
| Ключова дума | static |
Не |
| Достъп до членове на външния клас | Само статични | Всички |
| Изисква екземпляр на външния клас за създаване | Не | Да |
| Връзка с екземпляра на външния клас | Не | Да |