Ohjelmoinnin jatkokurssi: kurssikokeen 2. tehtävän ratkaisuehdotuksia
Pisteiden jakautuminen: joka kohdasta 4p (a,b,c)
a) seuraavista asioista pääosa mainittu
- Aliluokka perii yliluokkansa metodit ja muuttujat (mutta privaatteihin kenttiin ei päästä käsiksi kuin public-metodeilla).
- Aliluokalla on vain yksi yliluokka (mutta yliluokan
yliluokka jne.), kun taas yliluokalla voi olla useita aliluokkia
(joista se ei tiedä mitään).
- Aliluokassa voidaan korvata eli syrjäyttää yliluokan metodeja.
Periytymiseen liittyvistä asiavirheistä pisteitä pois vakavuuden mukaan, muista virheistä ei pisteitä pois, jos ovat vähäisiä.
b) samoin kuin edellisessä, kaikkea ei tarvitse olla maininnut
- Abstraktista luokasta tai rajapintaluokasta ei
kummastakaan voi luoda ilmentymää. Voivat olla muuttujien tyyppeinä.
Pakottavat korvaamaan metodeitaan.
- Abstrakti luokka peritään (ja vain yksi voidaan periä),
mutta rajapintaluokka toteutetaan (ja sama luokka voi toteuttaa useampia
rajapintoja).
- Abstraktissa luokassa voidaan toteuttaa toiminnallisuutta, kun taas rajapinta vain listaa toteutettavat metodit.
- Hyvässä ratkaisussa on tehty selkeä ero näiden kahden
asian välillä ja ehkä selitetty missä tilanteessa kumpaakin kannattaa
käyttää.
c)
- Polymorfismi: syrjäytettävän metodin valinta menee olion
tyypin, ei muuttujan tyypin mukaan. Esim. Elain kissa = new Kissa(); ja
kutsuttaessa aantele()-metodia kissa.aantele(); käytetään Kissan, ei
Elaimen aantele()-metodia.
Koukkumetodi:
public abstract class Kappale() {
public abstract int pintaAla(); //KOUKKU
public int tilavuus(int korkeus) {
return this.pintaAla()*korkeus;
}
}