Dlaczego nie występuje przysłanianie?

Dlaczego nie występuje przysłanianie?
  • Rejestracja: dni
  • Ostatnio: dni
0
Kopiuj
public class wtf
{
  public static void main (String[] args)
  {
    Podklasa Obiekt = new Podklasa();
    System.out.println(Obiekt.geti());
  }
}

class Nadklasa
{
  protected int i = 2;
  int geti()
  {
    return this.i;
  }
}


class Podklasa extends Nadklasa
{
  protected int i = 5;
}

Wypluwa 2 a nie 5, dlaczego? PRzecież jeśli się nie mylę, to atrybut i zdefiniowany w Podklasie powinien przysłonić ten z Nadklasy?

airborn
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 274
0

Przesłanianie dotyczy tylko metod, a nie pól. Możesz w konstruktorze Podklasa ustawić wartość pola i na 5 (ponieważ jest ono protected)

Wibowit
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: XML Hills
0

Wszystkie pola w obiektach javowych są niewirtualne, w sensie dostęp do nich jest statycznie rozwiązywany. Wirtualne wywołania dotyczą tylko i wyłącznie metod instancji.

Inaczej mówiąc - obiekty Javowe zachowują się podobnie do obiektów w C++ tylko mają domyślnie virtuala przy metodach.

Przesłanianie to co innego niż nadpisywanie i wywołania wirtualne - przesłanianie dotyczy widoczności zmiennych w danym zakresie kodu, natomiast nadpisywanie metod połączone z wywołaniami wirtualnymi zmienia zachowanie obiektów z każdego miejsca.

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.