Javassa löytyy mahtavan yllättävä ja tarpeellinen ominaisuus. Se on luokkien periytyminen. Luokalla voi siis olla yliluokka, jonka käyttäytymistä se perii. Jännittävää on myöskin, että luokalla voi olla monia aliluokkia. Luokat järjestyvätkin näin eräänlaiseen puumuodostelmaan. Periyttäminen on myökin näppärä tapa niputtaa saman tyylisiä luokkia. Esimerkiksi luokasta Koira on helppo tehdä aliluokkia erilaisille koirille ilman, että koodi vaatii paljon muutoksia. Jos meillä vaikka on Koira-luokan aliluokat Mäyräkoira ja Saksanpaimenkoira, ja silti huomaamme, että tarvitsemme vielä luokan Labradorinnoutaja, voimme vain tehdä siitä uuden aliluokan Koiralle. Jos kaikki olisi samassa luokassa, muutoksia tarvittaisiin useisiin paikkoihin tai sitten erilliseen Labradorinnoutaja-luokkaan joutuisi tekemään lähes identtistä koodia kuin muihinkin koiraluokkiin.
Periyttäminen avaa aivan uusia mahdollisuuksia koodaajalle. Periyttämällä jonkun oman luokan jostain valmiista (tai toisesta omasta luokasta) saa käyttöönsä luokan julkiset metodit ja attribuutit. Myös protected-määre avaa ovet metodien käyttämiseksi aliluokassa. Itsekin huomasin tämän koodatessani omaa pallopeliäni. Periytin palloni luokasta Ellipse2D.Double, ja sain käyttööni sen julkiset metodit. Niistä hyödyllisin oli ehdottomasti getBounds2D()-metodi, jonka avulla sain pallon ja kursorin törmäyksen helposti selvitettyä.
Java tarjoaa myös uskomattoman kokoelman pakkauksia ja niissä valtavan määrän luokkia, joista ohjelmoijat voivat mielensä mukaan periyttää omia luokkiaan. Tämä säästää jokaista ohjelmoijaa itseään erittäin paljon, sillä ellei olisi mahdollisuutta periyttää ja käyttää valmiina olevia luokkia, jokainen joutuisi mahdottoman suuren työmäärän eteen. Periyttäminen lyhentää koodirivien määrää: samanlaisten metodien luomisesta jokaiseen luokkaan säästyy periyttämällä kaikki luokat samasta yliluokasta. Esimerkiksi sen sijaan, että tekisi sekä Mäyräkoira- että Saksanpaimenkoira-luokille omat samanlaiset merkkaaReviiri()-metodit, voi vain periyttää kummankin luokasta Koira. Jos metodin toteutuksen halutaan kuitenkin olevan hieman erilainen, on parempana vaihtoehtona tarjolla myös rajapinnat ja abstaktit luokat. Abstrakti-luokka toimii suurelta osin samoin tavoin kuin rajapintakin kuitenkin sillä erotuksella, että luokka voi periä ainoastaan yhden (abstraktin)luokan, mutta toteuttaa monta rajapintaa. Abstrakti yliluokka antaa tosin enemmän mahdollisuuksia: voi esimerkiksi valita kirjoittaako sinne kokonaista koodia vai pelkästään metodeita joiden toteutus määritellään periytyvissä aliluokissa. Rajapintaan kun taas ei voi kirjottaa kokonaista koodia.
Periyttäminen on kuitenkin erittäin hyödyllinen ominaisuus, johon tutustuttiin jo Java1-tehtäväkierroksella. Vaikka silloin tiesin, että Sieni perii luokan Esine, en vielä ymmärtänyt todella mitä se oikein tarkoittaa. Vasta myöhemmin olen löytänyt periytymisen valtavan hienot mahdollisuudet ja valmiiden luokkien hyödyntämisen uusia luodessa.