Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Zagnieżdżanie klas


Rekomendowane odpowiedzi

Opublikowano

Witam,

czy mógłby ktoś mi wytłumaczyć dlaczego inna klasa zagnieżdżona w klasie main musi być statyczna i dlaczego kiedy nie jest, kompilator wyrzuca mi błąd?

Opublikowano

Witam,

czy mógłby ktoś mi wytłumaczyć dlaczego inna klasa zagnieżdżona w klasie main musi być statyczna i dlaczego kiedy nie jest, kompilator wyrzuca mi błąd?

eeem, nie musi.

public class Main
{
	public static void main (String[] args) // throws java.lang.Exception
	{
		System.out.println(new Main().new A().new B());
	}
 
	public class A
	{
		public class B
		{
 
		}
	}
}
spokojnie zawsze odpali, nie rozumiem co tutaj Ci nie pasuje :D

 

 

EDIT: ah, chyba po prostu nie rozumiesz czym są zagnieżdżone klasy?

public class TopLevelClass
{
    int i = 4;
    public class InnerClass
    {
        public InnerClass()
        {
            i = 6;
        }
    } 

    public static StaticInnerClass 
    { // tu nie mamy dostępu do "i" } 
    }
Z poziomu JVM wygląda to już mniej-więcej tak:

public class TopLevelClass
{
    int i = 4;
    public static class InnerClass
    {
        final TopLevelClass $1;
        public InnerClass(TopLevelClass inst)
        {
            $1 = inst;
            $1.i = 6;
        }
    }

    public static StaticInnerClass
    { // tu nie mamy dostępu do "i"
    }
}
bez "static" klasa musi mieć odwołanie do instancji klasy nadrzędnej, dzięki temu, tworząc taką klasę mamy zawsze dostęp do wszystkich rzeczy z klasy nadrzędnej.

 

https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

1438614356923701010629.png

 

Opublikowano

eeem, nie musi.

public class Main
{
	public static void main (String[] args) // throws java.lang.Exception
	{
		System.out.println(new Main().new A().new B());
	}
 
	public class A
	{
		public class B
		{
 
		}
	}
}

spokojnie zawsze odpali, nie rozumiem co tutaj Ci nie pasuje :D

rzeczywiście  :yay: 

może trochę nie doprecyzowałem, dlatego spytam prosto z mostu - dlaczego nie mogę utworzyć nowego obiektu w taki sposób A test = new A(); kiedy klasa znajduje się w klasie main i nie jest klasą statyczną?

Opublikowano

rzeczywiście  :yay: 

może trochę nie doprecyzowałem, dlatego spytam prosto z mostu - dlaczego nie mogę utworzyć nowego obiektu w taki sposób A test = new A(); kiedy klasa znajduje się w klasie main i nie jest klasą statyczną?

zobacz moją edytowaną odpowiedz :P

1438614356923701010629.png

 

Opublikowano

zobacz moją edytowaną odpowiedz :P

dzięki, dobrze zrozumiałem że z tego powodu nie mogę stworzyć nowego obiektu, tak?

Opublikowano

dzięki, dobrze zrozumiałem że z tego powodu nie mogę stworzyć nowego obiektu, tak?

możesz, ale w tym celu musisz mieć instance klasy w której on się znajduje.

 

Albo właśnie zrobić klasę statyczną, ogólnie zazwyczaj w miarę możliwości rób wszystkie statyczne jak nie potrzebujesz tego co oferują "zwykłe", bo to jednak niepotrzebne zjadanie pamięci.

1438614356923701010629.png

 

Opublikowano

możesz, ale w tym celu musisz mieć instance klasy w której on się znajduje.

 

Albo właśnie zrobić klasę statyczną, ogólnie zazwyczaj w miarę możliwości rób wszystkie statyczne jak nie potrzebujesz tego co oferują "zwykłe", bo to jednak niepotrzebne zjadanie pamięci.

czyli z poziomu klasy statycznej nie mogę stworzyć obiektu w klasie która jej nie zakrywa, jeżeli klasa w której tworzę nowy obiekt nie jest klasą statyczną? chyba nie do końca rozumiem

Opublikowano

czyli z poziomu klasy statycznej nie mogę stworzyć obiektu w klasie która jej nie zakrywa, jeżeli klasa w której tworzę nowy obiekt nie jest klasą statyczną? chyba nie do końca rozumiem

masz w linku wszystko opisane: https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

 

no to działa tak jak wszystko, tak samo jak są zmienne statycznie i nie.

Tak samo masz klasy... 

Wszystko działa identycznie, tak samo jak nie możesz ze statycznej metody wywołać metody z obiektu.

1438614356923701010629.png

 

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...