Java ohjelmoinnin perusteita: periytyminen

Luokkien perintä (inherit) on erinomainen keino esimerkiksi yhdistää erilaisia luokkia toimivaksi kokonaisuudeksi. Jos on luotu esim. luokka Auto ja tarvitaan luokka Taksi on kannattavaa pohtia periytymisen käyttöä. Luokan Auto sisältämät muuttujat ja metodit todennäköisesti tarvitaan myös luokassa Taksi. Luokkaan Taksi voidaan lisäksi määritellä ko. luokan tarvitsemia lisämetodeja ja muuttujia.

Luokka Taksi perii Autolta kaikki metodit ja muuttujat joita ei ole esitelty private määreellä. Periytyminen ei myöskään onnistu jos yliluokka on esitelty final määreellä. Yliluokka tässä tapauksessa olisi Auto ja aliluokka Taksi. Kuitenkin jos yliluokan public metodi käyttää yliluokassa metodia joka on private, voidaan tätä metodia käyttää normaalisti myös aliluokissa.

Muuttujien ja luokkien määrittelyt perinnässä toimivat seuraavasti:
private, muuttuja tai metodi ei ole perittävissä.
protected, muuttuja tai metodi voidaan periä sellaisenaan samassa paketissa oleviin luokkiin
public, voidaan periä sellaisenaan
final, muuttujaa tai metodia ei voida periä

Vaikka perintä mahdollistaakin helpon ja mukavan keinon luoda ohjelmia on sen käyttö kannattavaa suunnitella mahdollisimman tarkkaan. Jos ylimmän luokan suunnittelu menee pieleen voi se aiheuttaa laajan muutostarpeen koko ohjelmistoon. Jos auton vuosimalli otetaan alkuperäisessä suunnitelmassa esimerkiksi käyttöön kokonaislukuna ja se myöhemmin halutaan muuttaa tekstityyppiseksi, saatetaan joutua tekemään isojakin muutoksia. Toki alkuperäisen luokan getteri ja setteri voidaan ylikirjoittaa aliluokassa, mutta helposti saatetaan joutua muuttamaan myös tietokantaa tms.

Yksi osa periytymistä on ylikirjoittaminen (puhutaan myös peittämisestä). Yliluokan tietty metodi voidaan ylikirjoittaa aliluokassa uudestaan. Tämä kuitenkin on monimuotoisuutta josta erikseen omassa artikkelissaan.

Liitteenä olevassa Eclipse projektissa luodaan luokat Auto, Taksi ja InvaTaksi. Taksi perii Auton ja InvaTaksi Taksin. Pakatun projektin voit ladata oheisesta linkistä. PerintäEsimerkki.zip

Advertisements

Vastaa

Täytä tietosi alle tai klikkaa kuvaketta kirjautuaksesi sisään:

WordPress.com-logo

Olet kommentoimassa WordPress.com -tilin nimissä. Log Out / Muuta )

Twitter-kuva

Olet kommentoimassa Twitter -tilin nimissä. Log Out / Muuta )

Facebook-kuva

Olet kommentoimassa Facebook -tilin nimissä. Log Out / Muuta )

Google+ photo

Olet kommentoimassa Google+ -tilin nimissä. Log Out / Muuta )

Muodostetaan yhteyttä palveluun %s