Sobes.tech
Middle

Классҳои дарунсохт чӣ гунаанд?

sobes.tech AI

Ҷавоб аз AI

Классът, вложен вътре в друг клас, е клас, определен вътре в друг клас.

Видове вложени класове в Java:

  • Статични вложени класове (Static Nested Classes):

    • Достъпни са от външния клас без неговия екземпляр.
    • Не имат достъп до нестатичните полета и методи на външния клас директно.
    • Обявяват се с ключовата дума static.
  • Вътрешни класове (Inner Classes):

    • Член-вътрешни класове (Member Inner Classes):
      • Обявяват се на нивото на членовете на външния клас.
      • Имат достъп до всички членове на външния клас (включително приватните).
      • Изискват екземпляр на външния клас за създаване на свой собствен екземпляр.
    • Локални вътрешни класове (Local Inner Classes):
      • Определят се вътре в метод, конструктор или инициализационен блок.
      • Виждат се само в рамките на този метод/блок.
      • Имат достъп до final или ефективно final локални променливи на външния контекст.
    • Анонимни вътрешни класове (Anonymous Inner Classes):
      • Класове без име.
      • Използват се за създаване на обекти, които веднага реализират интерфейс или разширяват клас.
      • Определят се и се инстанцират заедно.

Пример за статичен вложен клас:

class OuterClass {
    private static String msg = "Hello from Outer";

    static class StaticNestedClass {
        public void display() {
            // Може да получи достъп до статичните членове на външния клас
            System.out.println(msg);
        }
    }
}
// Използване
// OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
// nestedObject.display();

Пример за член-вътрешен клас:

class OuterClass {
    private String msg = "Hello from Outer";

    class InnerClass {
        public void display() {
            // Може да получи достъп до всички членове на външния клас
            System.out.println(msg);
        }
    }
}
// Използване
// OuterClass outerObject = new OuterClass();
// OuterClass.InnerClass innerObject = outerObject.new InnerClass();
// innerObject.display();

Предимства на използването на вложени класове:

  • Групиране: Логически свързани класове могат да бъдат групирани.
  • Инкапсуляция: Вътрешните класове могат да имат достъп до приватните членове на външния клас, осигурявайки по-добра инкапсулация.
  • Четливост и поддръжка: Скриват помощни класове вътре в основния клас.
  • Ефективност: Могат да се използват за създаване на по-компактни и ефективни структури от данни.