Junior
Kas ir iekšējās klases?
sobes.tech AI
Atbilde no AI
Iekļautās klases (nested classes) ir klases, kas ir deklarētas citas klases iekšienē. Tās var būt statiskas (static nested classes) un nestatiskas (inner classes).
Statiskās iekļautās klases:
- Deklarētas ar
staticmodifikatoru. - Tieši nevar piekļūt ārējās klases nestatiskajiem locekļiem (tikai caur ārējās klases instanci).
- Var saturēt gan statiskos, gan nestatiskos locekļus.
- Tiek izveidotas bez ārējās klases instances.
public class Outer {
private static int staticOuterVar = 10;
private int instanceOuterVar = 20;
public static class StaticNested {
// Pieeja staticOuterVar
public void printStaticValue() {
System.out.println(staticOuterVar);
}
// Tieša pieeja instanceOuterVar nav iespējama
// public void printInstanceValue() {
// System.out.println(instanceOuterVar); // Kompilācijas kļūda
// }
}
}
Statiskās iekļautās klases izmantošana:
// Piemērs, kā izveidot statiskas iekļautās klases instanci
Outer.StaticNested nestedObject = new Outer.StaticNested();
nestedObject.printStaticValue(); // Izvadīs 10
Nestatiskās iekļautās klases (Inner Classes):
- Deklarētas bez
static. - Pilnīga piekļuve visiem ārējās klases locekļiem, ieskaitot privātos.
- Negali saturēt statiskos locekļus (izņemot konstantes ar laika ierobežojumu).
- Prasa ārējās klases instanci.
public class Outer {
private static int staticOuterVar = 10;
private int instanceOuterVar = 20;
public class Inner {
// Pieeja staticOuterVar un instanceOuterVar
public void printValues() {
System.out.println(staticOuterVar); // Pieejams
System.out.println(instanceOuterVar); // Pieejams
}
}
}
Nestatiskās iekļautās klases izmantošana:
// Piemērs, kā izveidot nestatiskas iekļautās klases instanci
Outer outerObject = new Outer();
Outer.Inner innerObject = outerObject.new Inner();
innerObject.printValues(); // Izvadīs 10 un 20
Iekļauto klases priekšrocības:
- Loģiska grupēšana: Klases, kas tiek izmantotas tikai vienas citas klases ietvaros, var tikt loģiski grupētas.
- Inkapulācija: Iekļautās klases piekļūst privātajiem ārējās klases locekļiem.
- Lasāmība un uzturēšana: Kods kļūst sakārtotāks.
Nestatiskās iekļautās klases tipi:
- Lokālās klases: Deklarētas metodes iekšienē.
- Anonīmās klases: Klases bez nosaukuma, parasti izmanto, lai izveidotu abstrakta klases, interfeisa vai bāzes klases instanci ar metožu pārdefinēšanu.
Lokālā klase:
public class Outer {
public void myMethod() {
class LocalClass {
void display() {
System.out.println("Lokālās klases iekšienē");
}
}
LocalClass local = new LocalClass();
local.display();
}
}
Anonīma klase (ar interfeisu piemērs):
interface Greeting {
void sayHello();
}
public class Outer {
public void greet() {
Greeting anonymousGreeting = new Greeting() {
@Override
public void sayHello() {
System.out.println("Sveiciens no anonīmās klases!");
}
};
anonymousGreeting.sayHello();
}
}