Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele OOP-Periaatteet: Perintä | OOP
Java OOP
course content

Kurssisisältö

Java OOP

Java OOP

1. Kuinka Työskennellä IDE:n Kanssa?
2. OOP
3. Rajapinta

book
OOP-Periaatteet: Perintä

Perintä

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

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

  • Luokkaa, jota käytetään 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 ominaisuudet ja piirteet – eli yliluokan (metodit ja muuttujat).

Luokan voi periä käyttämällä avainsanaa 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, sekä luokka Parrot, jolla on omat kentät ja metodit. Papukaija on lintu, joten loogisesti papukaijan tulisi periä Bird-luokka:

Tässä on kuvakaappauksen koodi, kirjoitettu 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 :("); } } }

Käydään läpi, mitä näissä kuvissa tapahtuu:

  1. Luodaan luokka Bird, joka on tässä tapauksessa yliluokka. Tällä luokalla on omat kenttänsä ja metodinsa;

  2. Luodaan luokka Parrot, joka käyttää extends-avainsanaa periäkseen yliluokanBird. Parrot-luokka on aliluokka, jolla on omat kentät ja metodit. Lisäksi aliluokkana Parrotperii kaikki yliluokan Bird kentät ja metodit;

  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 sitten aliluokan Parrot kentät. Seuraavaksi kutsutaan metodeja: ensin yliluokan metodit ja sitten aliluokan metodi.

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

Miksi teemme näin?

Kun meillä on useita erilaisia Bird-aliluokkia, ei pelkästään Parrot, vaan esimerkiksi myös Pigeon ja Penguin, meillä olisi paljon päällekkäisiä kenttiä, kuten boolean canFly. 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 peritään paitsiprivate-muuttujat ja metodit.

Huomio

Et voi periä itseäsi!

Aiemmin mainitsin, että aliluokalla olisi pääsy kaikkiin yliluokan muuttujiin ja metodeihin. Tämä ei kuitenkaan ole täysin totta.

Todellisuudessa kaikki private-muuttujat ja -metodit 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, kirjoitamme @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 Bird-luokan perimisen.

Nämä ovat vain perussäännöt ja perinnän ominaisuudet. Kyseessä on laaja aihe, jota tulet käyttämään hyvin usein. Kurssin aikana tutustut muihin perinnän osa-alueisiin ja käytät niitä yhä useammin.

1. Miksi tarvitsemme perintää Javassa?

2. Kuinka monesta luokasta voimme periä samanaikaisesti?

3. Miten perintä voidaan estää Javassa?

question mark

Miksi tarvitsemme perintää Javassa?

Select the correct answer

question mark

Kuinka monesta luokasta voimme periä samanaikaisesti?

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 2. Luku 2

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

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

course content

Kurssisisältö

Java OOP

Java OOP

1. Kuinka Työskennellä IDE:n Kanssa?
2. OOP
3. Rajapinta

book
OOP-Periaatteet: Perintä

Perintä

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

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

  • Luokkaa, jota käytetään 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 ominaisuudet ja piirteet – eli yliluokan (metodit ja muuttujat).

Luokan voi periä käyttämällä avainsanaa 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, sekä luokka Parrot, jolla on omat kentät ja metodit. Papukaija on lintu, joten loogisesti papukaijan tulisi periä Bird-luokka:

Tässä on kuvakaappauksen koodi, kirjoitettu 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 :("); } } }

Käydään läpi, mitä näissä kuvissa tapahtuu:

  1. Luodaan luokka Bird, joka on tässä tapauksessa yliluokka. Tällä luokalla on omat kenttänsä ja metodinsa;

  2. Luodaan luokka Parrot, joka käyttää extends-avainsanaa periäkseen yliluokanBird. Parrot-luokka on aliluokka, jolla on omat kentät ja metodit. Lisäksi aliluokkana Parrotperii kaikki yliluokan Bird kentät ja metodit;

  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 sitten aliluokan Parrot kentät. Seuraavaksi kutsutaan metodeja: ensin yliluokan metodit ja sitten aliluokan metodi.

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

Miksi teemme näin?

Kun meillä on useita erilaisia Bird-aliluokkia, ei pelkästään Parrot, vaan esimerkiksi myös Pigeon ja Penguin, meillä olisi paljon päällekkäisiä kenttiä, kuten boolean canFly. 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 peritään paitsiprivate-muuttujat ja metodit.

Huomio

Et voi periä itseäsi!

Aiemmin mainitsin, että aliluokalla olisi pääsy kaikkiin yliluokan muuttujiin ja metodeihin. Tämä ei kuitenkaan ole täysin totta.

Todellisuudessa kaikki private-muuttujat ja -metodit 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, kirjoitamme @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 Bird-luokan perimisen.

Nämä ovat vain perussäännöt ja perinnän ominaisuudet. Kyseessä on laaja aihe, jota tulet käyttämään hyvin usein. Kurssin aikana tutustut muihin perinnän osa-alueisiin ja käytät niitä yhä useammin.

1. Miksi tarvitsemme perintää Javassa?

2. Kuinka monesta luokasta voimme periä samanaikaisesti?

3. Miten perintä voidaan estää Javassa?

question mark

Miksi tarvitsemme perintää Javassa?

Select the correct answer

question mark

Kuinka monesta luokasta voimme periä samanaikaisesti?

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 2. Luku 2
some-alt