Java
Ominaisuudet > Periytyminen

Periytyminen (inheritance) on yksi Javan eli olio-ohjelmoinnin perusperiaatteita. Sen avulla voidaan vähentää turhan koodin toistamista. Siinä luokat voivat periä ominaisuusia ylemmiltä luokilta. Tällaista luokkaa, joka perii ylemmän luokan ominaisuuksia, kutsutaan lapsiluokaksi. Vastaavasti luokkaa, jonka ominaisuuksia peritään, kutsutaan lapsiluokan kantajaksi. Lapsiluokan kantaluokassa voidaan määritellä muuttujia ja metodeja, joita lapsiluokka perii ja voi käyttää. Ehtona tälle on kuitenkin se, että lapsiluokan kantaluokassa niiden näkyvyysmääre on määritelty suojattuna eli kyseessä on protected.
Kantaluokan toteutus metodille perityy lapsiluokalle Javassa. Lapsiluokalle on kuitenkin mahdollista kirjoittaa oma toteutuksensa metodille vanhan tilalle. Korvaavan metodin tulisi silti täyttää sama palvelu kuin alkuperäisen eri toteutuksella samaan rajapintaan. Lapsiluokan ilmentymää kutsuessa tulee kutsua kantaluokan rakentajaa. Javassa lapsiluokka kutsuu kantaluokan oletusrakentajaa automaattisesti. Java käyttää avainsanaa super oletuksen muuttamiseen. Oletuksen muuttamiseksi on kantaluokassa määriteltävä parametritön rakentaja lapsiluokan käyttöön. super -avainsanalla päästään käsiksi lapsiluokasta kantaluokan rakentajiin.
Rajapintaluokkaa käytetään myös jaetun toiminnallisuuden eristämiseen. Luokan tehtävänä on määrittää rajapinta, jota ohjelmiston luokat voivat ilmoittaa käyttävänsä. Rajapintaluokka sisältää vain staattisia ja julkisisa vakiotietokenttiä, ilman mahdollisuutta käyttää itseään kantaluokkana periytymisessä. Mikä tahansa ohjelmisto voi tämän sijasta ilmoittaa toteuttavansa rajapinnan. Määrittely tehdään vaihtamalla normaalin luokan class -avainsana avainsanaksi interface. Luokasta ei voi luoda ilmentymiä eikä määritellä rakentajaa. Ainoat hyväksytyt tietokentät ovat luokkamuuttujavakioita. Rajapintaluokan kaikki metodit ovat abstrakteja metodeja. Metodien tulee myös olla julkisia. Mikäli näkyvyysmääreitä public, static tai final ei olla sisällytetty metodeiden määrittelyyn, ne lisätään määritelmään automaattisesti.
Ajatellaan periytymistä seuraavan esimerkin avulla. Kaikille moottoriajoneuvoille (lapsiluokan kantaluokka) yhteisiä muuttujia voisi olla valmistaja, polttoaine sekä moottorin kapasiteetti. Vastaavasti yhteisiä metodeja kaikille moottoriajoneuvoille voisi olla moottorin sammutus sekä käynnistys. Moottoriajoneuvojen lapsiluokkia voisi olla auto, lentokone ja vene, jotka perivät siis yllä olevat muuttujat sekä metodit itselleen. Näiden lisäksi jokaisella lapsiluokalla voi olla omia muuttujia sekä metodeja. Auton muuttuja voisi olla väri, metodi voisi olla vaihda vaihdetta. Lentokoneen muuttaja voisi olla siipiväli, metodi voisi olla nosta/laske lentokorkeutta. Veneen muuttuja voisi olla veneen pituus, metodi voisi olla ruorin kääntäminen oikealle ja vasemmalle. Jotta homma ei olisi liian yksinkertaista, voi auto toimia lapsiluokan kantaluokkana erilaisille autotyypeille. Esimerkiksi avo-, lava-, henkilö- ja kuorma-auto perivät kaikki auton sekä moottoriajonevon suojatut muuttujat ja metodit. Avoautolla voisi vielä omana muuttujana olla malli sekä metodina voisi olla katon nostaminen auki kuumana kesäpäivänä.