Pytanie o klasy zewnętrzne / wewnętrzne

Pytanie o klasy zewnętrzne / wewnętrzne
G1
  • Rejestracja: dni
  • Ostatnio: dni
0

Uczę się do egzaminu i w tematach z poprzednich lat pojawiło się pytanie:

"- Czy z metod klasy wewnętrznej mamy dostęp do prywatnych, niestatycznych składników klasy
zewnętrznej? Jeśli tak, to po jakimi warunkami? "

No i jak dla mnie odpowiedź brzmi "TAK" , ale za chiny ludowe nie mogę znaleźć pod jakimi warunkami.
W przykładowym kodzie nie dopatruje się żadnego warunku, po prostu działa przy każdej kombinacji modyfikatorów jaka mi wpadła do głowy:

Kopiuj
class A
{
class B
{
      public void printMe()
      {
          x = 123;
          System.out.println(x);
      }
}

private int x = 5;
}


public class Main {
    
public static void main(String[] args) {
        A.B b = new A().new B();
        b.printMe();
    }
}

wynik programu "123"

M9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 13
0

Zapewne chodzi o szczegóły dotyczące klas wewnętrznych w obrębie metod, lub anonimowych klas wewnętrznych, a Ty bierzesz pod uwagę tylko te najprostsze. Są jeszcze statyczne klasy wewnętrzne, ale się specjalnie nie różnią od tych zwykłych.

//Wibowit nie wiem, czy to odpowiedź dla mnie, czy autora, ale jak widać statyczne klasy wewnętrzne prawie się nie różnią, a na pewno nie mają wpływu na dostępność memberów klas.

Wibowit
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: XML Hills
  • Rejestracja: dni
  • Ostatnio: dni
0
maciekx99 napisał(a)

Zapewne chodzi o szczegóły dotyczące klas wewnętrznych w obrębie metod, lub anonimowych klas wewnętrznych, a Ty bierzesz pod uwagę tylko te najprostsze. Są jeszcze statyczne klasy wewnętrzne, ale się specjalnie nie różnią od tych zwykłych.

//Wibowit nie wiem, czy to odpowiedź dla mnie, czy autora, ale jak widać statyczne klasy wewnętrzne prawie się nie różnią, a na pewno nie mają wpływu na dostępność memberów klas.

Statyczne klasy wewnetrzne nie maja dostepu do pol / metod niestatycznych klasy zew., poniewaz nie posiadaja niejawnego wskaznika (nazwijmy go $that) na instancje klasy otaczajacej - bo takiej po prostu nie ma. Chyba ze klasa statyczna wewnetrzna dostanie w konstruktorze jako parametr instancje klasy zewnetrznej, wtedy moze brac z niej wszystkie pola - $that jest podany jawnie.

G1
  • Rejestracja: dni
  • Ostatnio: dni
0

Myślę że to będzie właśnie ta odpowiedź. Czas się położyc , o 10 z rańca egzam ;)

  • Rejestracja: dni
  • Ostatnio: dni
0

@olo: wiem ze tak mozna, ale to nie byla odpowiedz na pytanie (moim zdaniem). Ale masz racje, to moze sie przydac. Ja raczej sie skupilem na tym, jak kompilator to kompuluje, a tam nie ma zadnego External.this tylko $this czy inne surogaty, zalezne od kompilatora.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.