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

Inicjalizacja zmiennej w podklasie

VPS Starter Arubacloud
0 głosów
178 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,280 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ź 622 wizyt
pytanie zadane 22 czerwca 2016 w C i C++ przez Burgonys Początkujący (440 p.)
0 głosów
2 odpowiedzi 1,325 wizyt
pytanie zadane 22 sierpnia 2020 w Java przez Bakkit Dyskutant (7,600 p.)
0 głosów
1 odpowiedź 478 wizyt

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 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.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...