Middle
Kuo skiriasi įterptos (nested) ir vidinės (inner) klasės Java?
sobes.tech AI
Atsakymas iš AI
-
Vidinės klasės (Nested classes): Statiniai išorinės klasės nariai. Neturi tiesioginės prieigos prie nestatinių narių (kintamųjų ir metodų) išorinėje klasėje, tik per išorinės klasės egzempliorių. Deklaruojamos su raktiniu žodžiu
static. -
Vidinės klasės (Inner classes): Nestatinių išorinės klasės nariai. Turi pilną prieigą prie visų narių (statinių ir nestatinių) išorinėje klasėje, įskaitant privačius. Norint sukurti vidinės klasės egzempliorių, reikalingas išorinės klasės egzempliorius. Nenaudoja
staticžodžio.
Pavyzdys:
// Išorinė klasė
class Outer {
private int outerField = 10;
private static int staticOuterField = 20;
// Statinė vidinė klasė
static class StaticNestedClass {
void display() {
// Prieiga tik prie statinių narių
System.out.println("Static nested: " + staticOuterField);
// Tiesioginis prieigos prie outerField nėra
// System.out.println(outerField); // Klaidų kompiliuojant
}
}
// Nestatinių vidinių klasių pavyzdys
class InnerClass {
void display() {
// Prieiga prie visų išorinės klasės narių
System.out.println("Inner: " + outerField);
System.out.println("Inner (static): " + staticOuterField);
}
}
}
// Naudojimas:
public class Main {
public static void main(String[] args) {
// Statinės vidinės klasės egzemplioriaus kūrimas
Outer.StaticNestedClass staticNested = new Outer.StaticNestedClass();
staticNested.display();
// Nestatinių klasių egzempliorių kūrimas reikalauja išorinės klasės egzemplioriaus
Outer outer = new Outer();
Outer.InnerClass inner = outer.new InnerClass();
inner.display();
}
}
| Savybė | Vidinė klasė (Nested Class) | Nestatinių klasių (Inner Class) |
|---|---|---|
| Raktinis žodis | static |
Nėra |
| Prieiga prie išorinės klasės narių | Tik statiniai | Visi |
| Egzemplioriaus kūrimas | Nereikalingas | Reikalingas |
| Ryšys su išorine klase | Nėra | Yra |