Java rajapinnat

Niin tämän aihe ei nyt erityisesti liity linxiin mutta kysyisin seuraavaa:

Onko rajapinnoille (interface) javassa mitään muuta tarkoitusta kun moniperiytymyys?
Ja voiko niille tehdä mitään muuta kuin toteuttaa?

Minusta rajapintojen tarkoitus on enemmänkin polymorfismi, suomeksi varmaankin monimuotoisuus. Moniperintäähän ei tarkalleen ottaen Javassa edes ole, vaikka rajapintojen avulla sitäkin voi tavallaan “simuloida”.

Jospa vaikka häpeilemättä kopioin enkkuwikipedian esimerkkiä, niin voi olla esimerkiksi rajapinta Eläin, jolla on metodi ääntele. Sitten voi olla tyyliin ArrayList<Eläin> laidun, josta otetaan alkioita yksi kerrallaan ja kutsutaan niiden ääntele-metodia. Sen tuloksena sitten Koira implements Eläin -luokan instanssi sanoo hau ja Kissa implements Eläin -luokan instanssi sanoo miau :stuck_out_tongue:

Kun nyt listat tulivat esille, niin konkreettisempi esimerkki on Javan List-rajapinta, jonka useampi erilainen lista toteuttaa, esimerkiksi LinkedList ja ArrayList, jotka pohjautuvat erilaisiin tietorakenteisiin. Silti molempia voi käyttää samaan tapaan tuon List-rajapinnan kautta.