Middle
Кадом намудҳои синфҳои дохилӣ мавҷуданд?
sobes.tech AI
Ҷавоб аз AI
Классове вътрешни статични и не статични (вътрешни) класове.
-
Статични вътрешни класове:
- Обявяват се с ключовата дума
static. - Имат достъп само до статичните членове (поля и методи) на външния клас, включително частните.
- Нямат директен достъп до не статичните членове на външния клас.
- Могат да бъдат създадени без инстанция на външния клас.
class Outer { private static int staticVar = 10; private int instanceVar = 20; static class StaticNested { void display() { System.out.println("Статична променлива: " + staticVar); // System.out.println("Инстанционна променлива: " + instanceVar); // Грешка при компилация } } } - Обявяват се с ключовата дума
-
Вътрешни класове (нестатични вътрешни класове):
- Обявяват се без ключовата дума
static. - Имат пълен достъп до всички членове (статични и нестатични) на външния клас, включително частните.
- Не могат да съдържат статични членове (поля или методи), освен финални константи.
- За тяхното създаване е необходима инстанция на външния клас.
class Outer { private static int staticVar = 10; private int instanceVar = 20; class Inner { void display() { System.out.println("Статична променлива: " + staticVar); System.out.println("Променлива на инстанция: " + instanceVar); } } } - Обявяват се без ключовата дума
-
Локални класове:
- Обявяват се вътре в методи, конструктори или инициализационни блокове.
- Имат достъп до всички финални и ефективно финални локални променливи, както и до членовете на външния клас, в който са дефинирани.
- Областта им на видимост е ограничена до блока, в който са обявени.
class Outer { void myMethod() { final int localVar = 5; // Ефективно финална class LocalInner { void display() { System.out.println("Локална променлива: " + localVar); } } LocalInner local = new LocalInner(); local.display(); } } -
Анонимни класове:
- Без име.
- Създават се и се инстанцират едновременно.
- Често се използват за създаване на реализации на интерфейси или разширения на класове.
interface MyInterface { void doSomething(); } class Outer { void myMethod() { MyInterface anon = new MyInterface() { @Override public void doSomething() { System.out.println("Прави нещо анонимно."); } }; anon.doSomething(); } }
Основните разлики между статичните вътрешни класове и вътрешните класове:
| Характеристика | Статичен вътрешен клас | Вътрешен клас |
|---|---|---|
| Ключова дума | static |
Няма |
| Достъп до членове | Само до статичните членове на външната класа | Всички членове на външната класа |
| Създаване на екземпляр | Без екземпляр на външната класа | Изисква се екземпляр на външната класа |