
"Tehát a második téma a statikus beágyazott osztályok. Ne feledje, hogy a nem statikus beágyazott osztályokat belső osztályoknak nevezik .
"Tekerjük a fejünket, mit jelent a statikus szó egy beágyazott osztálydeklaráció kontextusában. Mit gondolsz?"
"Ha egy változó statikusnak van deklarálva, akkor a változónak csak egy példánya létezik. Tehát, ha egy beágyazott osztály statikus, akkor ez azt jelenti, hogy ebből az osztályból csak egy objektumot hozhat létre?"
"Ne hagyd, hogy a statikus szó megzavarjon. Igaz, hogy ha egy változót statikusnak deklarálunk, akkor a változónak csak egy példánya van. De a statikus beágyazott osztály ebből a szempontból inkább egy statikus metódus. A static szó az osztálydeklaráció előtt azt jelzi, hogy az osztály nem tárol hivatkozásokat a külső osztályának objektumaira."
"Ah. A normál metódusok implicit módon tárolnak egy objektumhivatkozást, de a statikus módszerek nem. Ugyanez a helyzet a statikus osztályokkal, igazam van, Ellie?"
"Abszolút. Dicséretes a gyors megértése. A statikus beágyazott osztályok nem tartalmaznak rejtett hivatkozásokat a külső osztályuk objektumaira."
class Zoo
{
private static int count = 7;
private int mouseCount = 1;
public static int getAnimalCount()
{
return count;
}
public int getMouseCount()
{
return mouseCount;
}
public static class Mouse
{
public Mouse()
{
}
public int getTotalCount()
{
return count + mouseCount; // Compilation error.
}
}
}
– Nézzük át alaposan ezt a példát!
"Milyen változókhoz férhet hozzá a statikus getAnimalCount metódus?"
"Csak a statikusak. Mert ez egy statikus módszer."
"Milyen változókhoz férhet hozzá a getMouseCount metódus?"
"Mind a statikus, mind a nem statikus. Van egy rejtett hivatkozása (ez) egy állatkerti objektumra."
"Így van. Tehát a statikus beágyazott Mouse osztály, mint egy statikus metódus, hozzáférhet a Zoo osztály statikus változóihoz, de nem fér hozzá a nem statikusokhoz."
"Biztonságosan létrehozhatunk egérobjektumokat, még akkor is, ha egyetlen állatkerti objektumot sem hoztak létre. Ezt a következőképpen teheti meg:"
class Home
{
public static void main(String[] args)
{
Zoo.Mouse mouse = new Zoo.Mouse();
}
}
"A Mouse osztály valójában egy nagyon hétköznapi osztály. Az a tény, hogy az Állatkert osztályon belül van deklarálva, két különleges tulajdonságot ad neki."
1) A külső osztályon kívüli beágyazott osztály (például az egér osztály) objektumainak létrehozásakor a pont operátort is kell használnia a külső osztály nevének megadásához.
– Például így: Állatkert.Egér.
2) A Zoo.Mouse osztály és objektumai hozzáférnek a Zoo osztály privát statikus változóihoz és metódusaihoz (mivel a Mouse osztály a Zoo osztályon belül is deklarált).
– Mára ennyi.
– Szóval csak egy további név, és ennyi?
"Igen."
– Ez még könnyebb, mint elsőre tűnt.
GO TO FULL VERSION