Hierarchia klas i interfejsów - która metoda?

0

Witajcie
Mam oto takie pytanie z rozmowy kwalifikacyjnej - Co jeśli interfejs dziedziczy po innym interfejsie i w obu tworach jest metoda o takiej samej sygnaturze? Która metoda ma pierwszeństwo?
To samo odnośnie nadklasy.

1

No a próbowałeś zrobić to w swoim ide? :) tworzysz 2 interfejsy, drugi dziedziczy pierwszy i nadpisuje jego metodę domyślną. Potem wywołujesz w klasie innej. Przecież to żaden problem :) Sam zobaczysz co się stanie.

3

Klasa czy interfejs dziedziczący nadpisują metodę swojej bazy, nie ma tu specjalnie nad czym się zastanawiać.
Ciekawsze byłoby pytanie o metody domyślne w interfejsie i dziedziczenie pod dwóch interfejsach z taką metodą o identycznej sygnaturze...

interface B {
    default int fun(int x) {
        return x;
    }
}

interface C {
    default int fun(int x) {
        return x + 1;
    }
}

public class A implements B, C {

}

Polecam sprawdzić, a także co się stanie jak w klasie A chciałbyś zawołać super.fun(val)

0

screenshot-20210123231025.png

2

@Commander300:
Twoja klasa A powinna implementować metodę fun z modyfikatorem public (czemu?), a nie wywoływać ot tak w środku

 class A implements B, C {

    public int fun(int x) { // nie zadziała bo ... 
        return super.fun(x); 
    }
    
    public int funInCVersion(int x) { // poprawne wywołanie implementascji interfejsu C
        return C.super.fun(x); 
    }
    
     public int funInBVersion(int x) { // poprawne wywołanie implementascji interfejsu B
        return B.super.fun(x); 
    }
}

Może Ci ten przykład rozjaśni coś niecoś

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