• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Inicjalizacja zmiennej w podklasie

0 głosów
207 wizyt
pytanie zadane 10 września 2016 w Java przez SebekMakaron Obywatel (1,290 p.)

Witam Mam 3 klasy dziedziczone oto hierarchia:

Nadklasa

Podklasa - dziedziczy z Nadklasa

Podklasa podklasy- dziedziczy z Podklasa

1.W nadklasie inicjalizuję 3 zmienne prywatne poprzez konstruktor.

2.W konstruktorze podklasy inicjalizuję konstruktor nadklasy zapisem:

super(int zmienna1, itd.);

a także dodaje kolejna zmienna prywatna i inicjalizuję ja w konstruktorze ale juz poza instrukcja "super".

3. Tworze podklasę podklasy i również inicjalizuję 3 zmienne prywatne za pomocą instrukcji "super" w konstruktorze.

Moje pytanie dotyczy teraz jak zainicjalizować zmienna stworzoną w "podklasie" ponieważ instrukcja "super" nie działa, pojawia się błąd dotyczący tego iż ta zmienna jest prywatna.

Czy w takiej sytuacji jedynym wyjściem jest ustawienie zmiennej stworzonej w "podklasie" jako protected i wtedy będę miał dostęp z poziomu podklasy podklasy do tej zmiennej?

2 odpowiedzi

+1 głos
odpowiedź 10 września 2016 przez mbabane Szeryf (79,260 p.)
wybrane 11 września 2016 przez SebekMakaron
 
Najlepsza

no ewentualnie mozesz stworzyc setter i getter do zmiennej prywatnej nadklasy i tym sposobem ustawiac, ale wowczas nie bedizesz mial bezposredniego dostepu do tej zmiennej,

A jesli chcesz zeby dzialalo z instrukcja super to musisz utworzyc alternatywny konstruktor ktory bedzie przyjmowal odpowiednie parametry (instrukcje super nalezy wywolywać zawsze jako pierwsza):

public class NadKlasa
{
    private int pole;
    
    public NadKlasa()
    {    
    }

    public NadKlasa(int pole)
    {
        this.pole = pole;
    }
}

class PodKlasa extends NadKlasa
{
    
    private int polePodKlasy;
    
    public PodKlasa(int polePodklasy)
    {
        this.polePodKlasy = polePodklasy;
    }
    
    
    public PodKlasa(int polePodKlasy, int poleNadKlasy)
    {
        super(poleNadKlasy);
        this.polePodKlasy = polePodKlasy;
    }
}

class PodKlasaPodKlasy extends PodKlasa
{
    public PodKlasaPodKlasy()
    {
        super(12, 15);
    }
}

 

+1 głos
odpowiedź 10 września 2016 przez MichuDev Pasjonat (20,300 p.)
edycja 10 września 2016 przez MichuDev

Nie możesz pobrać zmiennych prywatnych z obiektu klasy jeśli twój kod nie należy do tej klasy, lub nie używa refleksji (java.lang.reflect).

W języku Java mamy 4 kwalifikatory dostępu:

  • Domyślny (nic nie piszemy), daje dostęp wewnątrz klasy, klasom w danym pakiecie.
  • Prywatny (private), daje dostęp do pola tylko danej klasie.
  • Chroniony (protected), daje dostęp do pola tylko tej klasie, klasom w danym pakiecie, oraz tym co dziedziczą (przeznaczony do dziedziczenia).
  • Publiczny (public) - dla każdego.

W twoim przypadku użyłbym protected lub getterów i setterów.

Podobne pytania

+1 głos
1 odpowiedź 813 wizyt
pytanie zadane 22 czerwca 2016 w C i C++ przez Burgonys Początkujący (440 p.)
0 głosów
2 odpowiedzi 1,700 wizyt
pytanie zadane 22 sierpnia 2020 w Java przez Bakkit Dyskutant (7,600 p.)
0 głosów
1 odpowiedź 623 wizyt

93,424 zapytań

142,421 odpowiedzi

322,646 komentarzy

62,785 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...