Middle
Koje su razlike između ugniježđenih (nested) i unutrašnjih (inner) klasa u Javi?
sobes.tech АИ
Одговор од АИ
-
Унутрашње класе (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 |
Нема |
| Доступ до чланова спољашње класе | Само статички | Све |
| Потребан экземпляр спољашње класе за креирање | Не | Да |
| Веза са экземпляром спољашње класе | Не | Да |