Czy statyczna Klasa zagnieżdżona może zostać utworzona w Javie?
Z poradników Java Oracle znalazłem ten tekst:
Podobnie jak w przypadku metod klasowych i zmiennych, statyczna Klasa zagnieżdżona jest powiązana ze swoją klasą zewnętrzną. Podobnie jak statyczne metody klas, statyczna Klasa zagnieżdżona nie może odnosić się bezpośrednio do zmiennych instancji lub metod zdefiniowanych w jej klasie-może używać ich tylko poprzez odniesienie do obiektu.
Uwaga: statyczna Klasa zagnieżdżona współdziała z instancjami klasy zewnętrznej (i innymi klasami) po prostu jak każda inna klasa na najwyższym poziomie. W efekcie statyczna Klasa zagnieżdżona jest behawioralnie klasą najwyższego poziomu, która została zagnieżdżona w innej klasie najwyższego poziomu dla wygody pakowania.
Statyczne klasy zagnieżdżone są dostępne za pomocą zamykającej się nazwy klasy:
OuterClass.StaticNestedClass
Na przykład, aby utworzyć obiekt dla statycznej klasy zagnieżdżonej, użyj składni:
Klasa zewnętrzna.StaticNestedClass nestedObject = nowe Klasa zewnętrzna.StaticNestedClass();
Myślałem, że nie jest możliwe utworzenie statycznej klasy, więc nie bardzo rozumiem zdanie pogrubione.
Masz pojęcie, co to znaczy?
3 answers
Albo mylisz static
z abstract
, Jak mówi kihero, albo mieszasz pojęcie z klasą, która ma metody static
(która jest po prostu klasą, która ma metody statyczne).
Statyczna Klasa zagnieżdżona jest po prostu klasą zagnieżdżoną, która nie wymaga instancji swojej klasy zamykającej. Jeśli znasz C++, wszystkie klasy w C++ są klasami "statycznymi". W Javie zagnieżdżone klasy nie są domyślnie statyczne (ta niestatyczna odmiana jest również nazywana " klasą wewnętrzną"), co oznacza, że wymagają instancji swojej zewnętrznej klasy, którą śledzą za kulisami w ukrytym polu - ale to pozwala klasom wewnętrznym odnosić się do pól powiązanej z nimi klasy zamkniętej.
public class Outer {
public class Inner { }
public static class StaticNested { }
public void method () {
// non-static methods can instantiate static and non-static nested classes
Inner i = new Inner(); // 'this' is the implied enclosing instance
StaticNested s = new StaticNested();
}
public static void staticMethod () {
Inner i = new Inner(); // <-- ERROR! there's no enclosing instance, so cant do this
StaticNested s = new StaticNested(); // ok: no enclosing instance needed
// but we can create an Inner if we have an Outer:
Outer o = new Outer();
Inner oi = o.new Inner(); // ok: 'o' is the enclosing instance
}
}
Wiele innych przykładów na Jak utworzyć instancję niestatycznej klasy wewnętrznej w metodzie statycznej
Domyślnie deklaruję statyczne wszystkie zagnieżdżone klasy, chyba że potrzebuję dostępu do pól klasy.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:37
Statyczne klasy zagnieżdżone same w sobie nie są statyczne. W Javie żadna klasa nie jest statyczna. Słowo kluczowe Static w klasach zagnieżdżonych oznacza, że jest kolejnym statycznym członkiem klasy zewnętrznej. Ale to tylko kolejna surowa Klasa . Dlatego możemy utworzyć instancję tej klasy
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-10 14:58:06
Mylisz static
z abstract
. Nie można tworzyć instancji klas abstrakcyjnych. static
nie jest poprawnym kwalifikatorem dla klas najwyższego poziomu, ale znaczenie dla klas wewnętrznych jest takie, które zacytowałeś.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-17 22:29:27