Perintä (ohjelmointi)
From Wikipedia, the free encyclopedia
Perintä (engl. inheritance) on olio-ohjelmoinnissa tapa muodostaa uusia luokkatyyppejä laajentamalla jo aiemmin määriteltyjä luokkia.[1] Uusi luokkatyyppi saa käyttöönsä kaikki yliluokkien ominaisuudet, joita ei ole yliluokasta käsin estetty perimästä. Aliluokan on myös mahdollista uudelleenmääritellä joitain yliluokan ominaisuuksia ja metodeita. Uudelleenmäärittelyn toteutus vaihtelee eri ohjelmointikielissä. Esimerkiksi C#:ssa vain yliluokan merkatut metodit voidaan uudelleenmääritellä, mutta Javassa metodi voidaan asettaa uudelleenmäärittelemään aikaisemmat metodit. Perinnän tarkoituksena on vähentää koodin uudelleenkirjoittamista.
Lisäksi, koska aliluokkaan voidaan lisätä ominaisuuksia, joita ei yliluokassa ollut, voidaan aliluokkaa pitää yliluokan erikoistapauksena. Esimerkiksi yliluokka voi olla Hedelmä, jonka aliluokkana on Omena. Tällöin Hedelmä-luokassa määritellään ominaisuudet, jotka ovat yhteisiä kaikille hedelmille, kuten paino ja Omena luokassa määritellään ominaisuudet, jotka kuuluvat kaikille omenoille, mutta eivät kuulu esimerkiksi päärynöille. Luokkien periytymisessä voidaan siis ajatella olevan "is-a"-suhde. Aliluokan oliot ovat siis tyypiltään myös yliluokan olioita. Tämä ei kuitenkaan päde toiseen suuntaan, esimerkiksi luokan Hedelmä-olio ei välttämättä ole luokan Päärynä-olio.
Moniperinnässä aliluokalla voi olla monta yliluokkaa. Esimerkiksi aliluokalla Tutkimusapulainen voi olla yliluokat Tutkija ja Opiskelija, joista molemmista aliluokka perii ominaisuuksia. Kaikki ohjelmointikielet eivät tue moniperintää. Yleisimmistä kielistä C++ tukee moniperintää. Sen sijaan esimerkiksi Java ja C# eivät tue moniperintää, mutta niissä luokka voi toteuttaa (implement) usean rajapinnan (interface) ominaisuuksia.
Periytyminen voi myös tapahtua monitasoisesti. Esimerkiksi yliluokalla Hedelmä voi olla aliluokka Omena, jolla edelleen voi olla aliluokka Royal Gala. Tällöin siis luokka Royal Gala perii kaikki molempien yliluokkien ominaisuudet.