Middle
Kāda ir atšķirība starp iekšējām (inner) un iekšējām (nested) klasēm Java?
sobes.tech AI
Atbilde no AI
-
Iekšējās klases (Nested classes): Statiskie ārējās klases locekļi. Tie tieši nepiekrīt nestatiskajiem locekļiem (laukiem un metodēm) ārējā klasē, tikai caur ārējās klases eksemplāru. Deklarē ar atslēgvārdu
static. -
Iekšējās klases (Inner classes): Nestatiskie ārējās klases locekļi. Tiem ir pilna piekļuve visiem locekļiem (statiskajiem un nestatiskajiem) ārējā klasē, ieskaitot privātos. Lai izveidotu iekšējo klasi, nepieciešams ārējās klases eksemplārs. Nepieciešams nelietot
static.
Piemērs:
// Ārējā klase
class Outer {
private int outerField = 10;
private static int staticOuterField = 20;
// Statiskā iekšējā klase
static class StaticNestedClass {
void display() {
// Pieeja tikai pie statiskajiem locekļiem
System.out.println("Static nested: " + staticOuterField);
// Tieša pieeja outerField nav iespējama
// System.out.println(outerField); // Kompilācijas kļūda
}
}
// Nestatiskā iekšējā klase
class InnerClass {
void display() {
// Pieeja visiem ārējās klases locekļiem
System.out.println("Inner: " + outerField);
System.out.println("Inner (static): " + staticOuterField);
}
}
}
// Lietošana
public class Main {
public static void main(String[] args) {
// Statiskās iekšējās klases eksemplāra izveide
Outer.StaticNestedClass staticNested = new Outer.StaticNestedClass();
staticNested.display();
// Iekšējās klases eksemplāra izveide prasa ārējās klases eksemplāru
Outer outer = new Outer();
Outer.InnerClass inner = outer.new InnerClass();
inner.display();
}
}
| Īpašība | Iekšējā klase (Nested Class) | Iekšējā klase (Inner Class) |
|---|---|---|
| Atslēgvārds | static |
Nav |
| Piekļuve ārējās klases locekļiem | Tikai statiskie | Visi |
| Eksemplāra izveide | Nav nepieciešama | Nepieciešama |
| Saistība ar ārējās klases eksemplāru | Nav | Ir |