Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele OOP-Periaatteet: Perintä | Osio
Practice
Projects
Quizzes & Challenges
Visat
Challenges
/
Java Olio-Ohjelmoinnin Perusteet

bookOOP-Periaatteet: Perintä

Pyyhkäise näyttääksesi valikon

Perintä

Käsitellään OOP-periaatetta – Perintä.

Perintä on mekanismi, jonka avulla voidaan luoda luokkia toisen luokan pohjalta.

  • Luokkaa, joka toimii pohjana, kutsutaan yliluokaksi tai superluokaksi;
  • Luokkaa, joka luodaan yliluokan pohjalta, kutsutaan aliluokaksi, alaluokaksi tai jälkeläiseksi.

Näin ollen aliluokka voi periä toisen luokan – yliluokanominaisuudet ja piirteet (metodit ja muuttujat).

Luokan periminen tapahtuu avainsanalla extends. Aliluokan syntaksi, joka perii yliluokan, näyttää tältä:

Child.java

Child.java

copy
123
class Child extends Parent { // properties and methods }

Tarkastellaan esimerkkiä siitä, miten perintä toimii koodissa. Meillä on luokka Bird, jolla on tietyt kentät ja metodit, ja luokka Parrot, jolla on omat kentät ja metodit. Papukaija on lintu, joten loogisesti papukaijan tulisi periä Bird-luokka:

Tässä on kuvakaappauksesta otettu koodi, kirjoitettuna uudelleen paremman luettavuuden ja selkeyden vuoksi:

Bird.java

Bird.java

Parrot.java

Parrot.java

Main.java

Main.java

copy
12345678910111213141516171819
package animals.birds; public class Bird { public String color; public boolean canFly; public int maxAge; public void eat() { System.out.println("The bird is eating"); } public void fly() { if (canFly) { System.out.println("The bird is flying!"); } else { System.out.println("This bird can't fly :("); } } }

Tarkastellaan, mitä näissä kuvissa tapahtuu:

  1. Luodaan luokka Bird, joka on tässä tapauksessa yliluokka. Tällä luokalla on omat kentät ja metodit;
  2. Luodaan luokka Parrot, joka käyttää extends-avainsanaa periäkseen yliluokan Bird. Parrot-luokka on aliluokka, ja sillä on omat kentät ja metodit. Lisäksi aliluokkana Parrot perii kaikki kentät ja metodit yliluokasta Bird;
  3. Luodaan Parrot-luokan olio main-metodissa ja nähdään, että voimme alustaa sekä yliluokan että aliluokan kentät. Ensin alustetaan yliluokan Bird kentät ja sen jälkeen aliluokan Parrot kentät. Seuraavaksi kutsutaan metodeja: ensin yliluokan metodeja ja sitten aliluokan metodia.

Näin käytimme perintää perimään Bird-luokan.

Miksi näin tehdään?

Kun meillä on useita erilaisia Bird-aliluokkia, ei pelkästään Parrot, vaan esimerkiksi myös Pigeon ja Penguin, tällöin kenttiä, kuten boolean canFly, esiintyy paljon päällekkäin. Perinnän ensimmäinen hyöty on välttää päällekkäistä koodia. Lisäksi se parantaa merkittävästi luettavuutta. Käytännössä Bird-luokkaa ja sen aliluokkia kohdataan harvoin suoraan, mutta perintää käytetään yleisesti, erityisesti rajapintojen kanssa.

Huomio

Opit rajapinnoista tämän kurssin seuraavassa osiossa.

Perinnän säännöt

  • Peri vain yksi luokka. Java ei tue moniperintää. Yhdellä luokalla voi olla vain yksi yliluokka;

  • Kaikki periytyy paitsi private-muuttujat ja -metodit.

Huomio

Et voi periä itseäsi!

Aiemmin mainitsin, että aliluokka saa käyttöönsä kaikki yliluokan muuttujat ja metodit. Tämä ei kuitenkaan ole täysin totta.

Todellisuudessa kaikki private-määreellä merkityt metodit ja muuttujat eivät ole aliluokan käytettävissä.

  • Yliluokan metodin ylikirjoittaminen.

Kuvitellaan, että perimme luokan, mutta tietyt perityn koodin osat eivät miellytä. Oletetaan, että haluamme tietyn metodin toimivan eri tavalla kuin yliluokassa.

Ylikirjoittaaksemme yliluokan metodin, kirjoitetaan @Override sen yläpuolelle:

Parrot.java

Parrot.java

copy
1234
@Override public void eat() { System.out.println("The parrot is eating"); }

Yllä olevassa koodissa olemme ylikirjoittaneet yläluokan metodin, ja nyt kun tätä metodia kutsutaan alaluokasta, kutsutaan ylikirjoitettua metodia!

  • Periytymisen estäminen.

Jos et halua, että kukaan perii luokkaasi, käytä final-määrettä ennen sitä. Esimerkiksi:

Bird.java

Bird.java

Parrot.java

Parrot.java

copy
123
public final class Bird { // fields and methods }

Tällä tavalla käyttämällä avainsanaa final olemme kieltäneet periytymisen Bird-luokasta.

Nämä ovat vain perussäännöt ja periytymisen ominaisuudet. Aihe on laaja, ja tulet käyttämään sitä hyvin usein. Kurssin aikana tutustut muihin periytymisen osa-alueisiin ja käytät niitä yhä enemmän.

1. Miksi tarvitsemme periytymistä Javassa?

2. Kuinka monesta luokasta voimme periä kerrallaan?

3. Miten perintä voidaan estää Javassa?

question mark

Miksi tarvitsemme periytymistä Javassa?

Select the correct answer

question mark

Kuinka monesta luokasta voimme periä kerrallaan?

Select the correct answer

question mark

Miten perintä voidaan estää Javassa?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 1. Luku 17

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Osio 1. Luku 17
some-alt