Middle
Millised on sisemklasside tüübid?
sobes.tech AI
Vastus AI-lt
Statilised sisemklassid ja sisemklassid (mitte-staatilised sisemklassid).
-
Statilised sisemklassid:
- Deklareeritakse võtmesõnaga
static. - Neil on juurdepääs ainult staatilistele liikmetele (väljadele ja meetoditele) välisklassis, kaasa arvatud privaatsed.
- Neil ei ole otsest juurdepääsu mitte-staatilistele liikmetele välisklassis.
- Nad võivad olla instantsi loomata ilma välisklassi eksemplarita.
class Outer { private static int staticVar = 10; private int instanceVar = 20; static class StaticNested { void display() { System.out.println("Staatiline muutuja: " + staticVar); // System.out.println("Mitte-staatiline muutuja: " + instanceVar); // Kompileerimisviga } } } - Deklareeritakse võtmesõnaga
-
Sisemklassid (mitte-staatilised sisemklassid):
- Deklareeritakse ilma
staticvõtmesõnata. - Neil on täielik juurdepääs kõigile liikmetele (staatilistele ja mitte-staatilistele) välisklassis, kaasa arvatud privaatsed.
- Nad ei saa sisaldada staatilisi liikmeid (välju või meetodeid), välja arvatud lõplikud konstandid.
- Nad nõuavad välisklassi eksemplari olemasolu nende loomisel.
class Outer { private static int staticVar = 10; private int instanceVar = 20; class Inner { void display() { System.out.println("Staatiline muutuja: " + staticVar); System.out.println("Mitte-staatiline muutuja: " + instanceVar); } } } - Deklareeritakse ilma
-
Kohalikud klassid:
- Deklareeritakse meetodite, konstruktorite või initsialiseerimisblokide sees.
- Neil on juurdepääs kõigile lõplikule ja efektiivselt lõplikule kohalikele muutujatele ning välisklassi liikmetele, kus nad on defineeritud.
- Nende nähtavusala on piiratud nende deklareerimisblokiga.
class Outer { void myMethod() { final int localVar = 5; // Efektiivselt lõplik class LocalInner { void display() { System.out.println("Kohalik muutuja: " + localVar); } } LocalInner local = new LocalInner(); local.display(); } } -
Anonüümklassid:
- Nimeta kohalikke klasse.
- Loovad ja instantsi kohe.
- Sageli kasutatakse liideste või klasside laiendamiseks.
interface MyInterface { void doSomething(); } class Outer { void myMethod() { MyInterface anon = new MyInterface() { @Override public void doSomething() { System.out.println("Tegutseb anonüümselt."); } }; anon.doSomething(); } }
Peamised erinevused staatiliste sisemklasside ja sisemklasside vahel:
| Omadus | Staatiline sisemklass | Sisemklass |
|---|---|---|
| Võtmesõna | static |
Puudub |
| Juurdepääs liikmetele | Ainult staatilistele liikmetele välisklassis | Kõigi liikmetele välisklassis |
| Objekti loomine | Ilma välisklassi objekti loomata | Vajab välisklassi objekti |
| Staatilised liikmed | Võib sisaldada | Ei saa sisaldada (välja arvatud konstantsed) |