Pytanie o klasy zewnętrzne / wewnętrzne

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:

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"

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.

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.

0

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

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1