/* * Olio-ohjelmoinnin perusteet I, Jorma Laurikkala. * * Abstraktista nisäkkäästä peritty konkreettinen kissaa mallintava luokka, * joka osaa tervehtiä. * * Jorma Laurikkala (jorma.laurikkala@tuni.fi). * * Viimeksi muutettu 21.1.2020. * */ public class Kissa extends Nisakas implements Tervehtiva { /* * Vakiomuotoiset luokka-attribuutit. * */ // Elämien lukumäärän yläraja. public static final int MAXELOT = 9; /* * Luokka-attribuutit. * */ // Tosi, jos kissat haukottelevat. private static boolean haukottelee; /* * Ilmentymäattribuutit. * */ // Kissan väri. private String väri; // Kissan hännän tyyppi (esimerkiksi "kippura"). private String häntä; /* * Ilmentymämetodit. * */ /* * Kissa-luokan oletusrakentajassa kissaolion väriksi asetetaan musta * ja hännän tyypiksi kippura. */ public Kissa() { väri = "musta"; häntä = "kippura"; } /* * Parametrillinen rakentaja, jossa kissalle asetetaan ulkoisen tahon * määrittelemä väri (v) ja häntä (h). Annettu arvo asetetaan vain, * jos se on sallittu. */ public Kissa(String v, String h) { // Koodia lyhennetty aksessoreita kutsumalla, jolloin tarvitaan vähemmän // if-lauseita. väri(v); häntä(h); } /* * Parametrillinen rakentaja, jossa kissalle asetetaan seuraavat tiedot: * e = onko kissa elossa, kg = kissan paino, v = kissan väri ja h = hännän * tyyppi. Annettu arvo asetetaan vain, jos se on sallittu. */ public Kissa(boolean e, double kg, String v, String h) { // Kutsutaan yliluokan rakentajaa, jolloin koodia ei tarvitse monistaa // aliluokkaan. super(e, kg); // Vältetään koodin toistoa aksessoreita. väri(v); häntä(h); } private void hairikoi() { // Tavaroita hajoaa... } public String väri() { return väri; } public void väri(String v) { if (v != null && v.length() > 0) { väri = v; } } public String häntä() { return häntä; } public void häntä(String h) { if (h != null && h.length() > 0) { häntä = h; } } public boolean haukottelee() { return haukottelee; } public void haukottelee(boolean h) { haukottelee = h; } /* * Tulostetaan parametrina annettu ääniefekti. */ public void ääntele(String s) { System.out.println(s); } /* * Tulostetaan parametrina annettu ääniefekti k kertaa. */ public void ääntele(String s, int k) { for (int i = 0; i < k; i++) { ääntele(s); } } /* * Kissa sanoo näin tyytyväisenä. */ public void kehrää() { ääntele("murr, murrrr..."); } /* * Korvatut ilmentymämetodit. * */ /* * Karkea sääntö kissan koon arviointiin. */ @Override public boolean onkoIso() { return paino() > 10; } /* * Toteutetut ilmentymämetodit. * */ /* * Kissamaista syömistä. Yliluokan metodin toteutus. */ @Override public void syö() { System.out.println("Syön kuin kissa..."); kehrää(); } /* * Kissamainen moi. Rajapinnan metodin toteutus. */ @Override public void moikkaa() { System.out.println("Miu! Pusken jalkaa..."); } }