Słówko super - czyli dziedziczenie z superklasy - Java

0

Witam
Mam krótkie pytanie, otóz jestem nowy w javie i wlasnie pisze swoj maly program pseudo-bazo danowy z plikami .txt

I uzywam tam dziedziczenia - co by je troszke wycwiczyc - i zauwazylem, ze jesli klase A rozszerzam o klase B, to moge uzywac w klasie B pól(nie prywatnych) i metod z klasy A bez słówka super, jak i z nim.

Pytanie, skoro moge uzywac bez, po co je dodawac? jest jakas logiczna przyczyna czy ma to na celu tylko poprawienie czytelnosci kodu - gdyby ktos musial go kiedys zrozumiec lub ja po x lat chciał dodac poprawki?

pozdrawiam!

0

Jeśli po prostu wołasz te metody to nie musisz pisac super, ale wyobraź sobie że w klasie A masz metodę X() i w klasie B zmieniasz zachowanie tej metody dodając coś do niego. Nie kopiujesz wtedy kodu tylko robisz:

@Override
public void X(){
    //jakieśtam nowe instrukcje
    super.X();
}

Zauważ że nie da sie inaczej wywołać metody z nadklasy bo samo X() wywoła rekurencyjnie metodę która właśnie implemenetujesz :)

0

Bo możesz też nadpisywać metody rodzica:


class A {
    public void m(){
           println("A");
    }
}

class B extends A {
    public void m(){
           println("B");
    }
}


class C extends A {
    public void m(){
        super.m();   
        println("C");
    }
}

// w main:

a.m();
b.m();
c.m();
0

Ahaa! czyli nie jest koniecznie używanie tego super, jeśli nie trzeba - np pisząc jakis warunek w ifie itd. ? no to dowiedzialem sie cos nowego ;)

@Shalom
Faktycznie, jesli w klasie B tworze metode o takiej samej nazwie to musze uzyc super bo wywoła samą siebie ;)
A jesli potrzebuje w klasie B uzyc funkcjonalnosci metody z klasy A to nie musze pisac super? (jesli klasa nazywa sie inaczej)

@Koziołek
Nie uruchamiałem kodu, ale powiedzcie mi czy mam racje. Wynik wywołania w mainie bedzie:

A
B
AC

Bo w pierwszym wywołuje metode z klasy A (wyświetli "A"), w drugim nadpisaną metode (z klasy A) w klasie B, która wyswietla literke "B" zamiast "A", a w trzecim wypadku wywołuje metode z klasy A i jeszcze wypisuje dodatkowo literke C -czyli "AC" ? :D

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