/** Tiedosto: Elaimet.java Tekijä: Juha Peltomäki. Aihe: Eläin-luokkahierarkia. Malli periyttämisestä. Toiminta: Eläin-luokka on abstraktiluokka, joten siitä ei voi luoda omia olioita. Muut luokat ovat toteutuvia luokkia, joten niistä voi luoda olioita. */ abstract class Elain { String nimi; String paikka; // Missä eläin majailee. String aani; // Millainen ääni eläimellä on. // Elaimella ei ole Elain()-konstruktoria! Elain(String n, String p) { this.nimi = n; this.paikka = p; } void liiku(String paikka) { this.paikka = paikka; } abstract void aanna(); public String tiedot() { return this.nimi + " on paikassa " + this.paikka + "(" + this.getClass().getName() + ")."; } } /******************************************************************/ class Kissa extends Elain { String aani = "MIAU!"; // kissan ääni Kissa(String nimi, String paikka) { super(nimi, paikka); } void aanna() { System.out.println(nimi + ": " + aani ); } } /******************************************************************/ abstract class Sika extends Elain { String aani = "RÖH!"; // Sian ääni Sika(String nimi, String paikka) { super(nimi, paikka); } void aanna() { System.out.println(nimi + ": " + aani ); } } /******************************************************************/ class Emakko extends Sika { Emakko(String nimi, String paikka) { super(nimi, paikka); } } /******************************************************************/ class Karju extends Sika { Karju(String nimi, String paikka) { super(nimi, paikka); } } /******************************************************************/ class Possu extends Sika { Possu(String nimi, String paikka) { super(nimi, paikka); } } public class Elaimet { public static void main(String[] args) { Kissa kissa1 = new Kissa("Karvinen", "Navetta"); Kissa kissa2 = new Kissa("Väinö", "Metsä"); Karju iso = new Karju("Iso-Karju", "Karsina"); Possu pikku = new Possu("Pikku-Possu", "Nurkka"); System.out.println(kissa1.tiedot()); System.out.println(kissa2.tiedot()); System.out.println(iso.tiedot()); System.out.println(pikku.tiedot()); iso.liiku("Kaukalo"); pikku.liiku("Viljapelto"); System.out.println(iso.tiedot()); System.out.println(pikku.tiedot()); kissa1.aanna(); iso.aanna(); } }