9.7 Lösungen
9.7 Lösungen9.7.1 Haustierpolymorphismus
Klasse Haustier
package s1.block9;public abstract class Haustier {private String name;private boolean steuerpflichtig;private double kostenTierarzt;/*** Get the value of kostenTierarzt** @return the value of kostenTierarzt*/public double getKostenTierarzt() {return kostenTierarzt;}/*** Set the value of kostenTierarzt** @param kostenTierarzt new value of kostenTierarzt*/public void setKostenTierarzt(double kostenTierarzt) {this.kostenTierarzt = kostenTierarzt;}/*** Get the value of steuerpflichtig** @return the value of steuerpflichtig*/public boolean getSteuerpflichtig() {return steuerpflichtig;}/*** Set the value of steuerpflichtig** @param steuerpflichtig new value of steuerpflichtig*/public void setSteuerpflichtig(boolean steuerpflichtig) {this.steuerpflichtig = steuerpflichtig;}/*** Get the value of name** @return the value of name*/public String getName() {return name;}/*** Set the value of name** @param name new value of name*/public void setName(String name) {this.name = name;}public Haustier(String name, boolean steuerpflichtig, double kostenTierarzt) {this.name = name;this.steuerpflichtig = steuerpflichtig;this.kostenTierarzt = kostenTierarzt;}public String beschreibung() {String stpf = (steuerpflichtig) ? ", " : ", nicht ";String b = "Name :" + name+ stpf + "steuerpflichtig, Kosten: "+ kostenTierarzt;return b;}}
Klasse Hund
package s1.block9;/**** @author s@scalingbits.com*/public class Hund extends Haustier{private String rasse;/*** Get the value of rasse** @return the value of rasse*/public String getRasse() {return rasse;}public Hund(String name, double kostenTierarzt, String rasse) {super(name,true,kostenTierarzt);this.rasse = rasse;}public String beschreibung() {return super.beschreibung() + ", Rasse: " + rasse;}}
Klasse Katze
package s1.block9;public class Katze extends Haustier {private Vogel lieblingsVogel;public String vogel() {String vname;if (lieblingsVogel != null)vname = lieblingsVogel.getName();else vname = "keinen Vogel";return vname;}/**** @param v setzen des Lieblingsvogel*/public void setVogel(Vogel v) { lieblingsVogel=v;}public Katze(String name, double kostenTierarzt, Vogel lieblingsVogel) {super(name, false, kostenTierarzt);if ((lieblingsVogel !=null) && (lieblingsVogel instanceof Vogel))this.lieblingsVogel = lieblingsVogel;}public String beschreibung() {return super.beschreibung() + ", mag " + vogel();}}
Klasse Vogel
package s1.block9;/**** @author s@scalingbits.com*/public class Vogel extends Haustier{private boolean singvogel;/*** Get the value of singvogel** @return the value of singvogel*/public boolean getSingvogel() {return singvogel;}public Vogel(String name, double kostenTierarzt, boolean singvogel) {super(name, false, kostenTierarzt);this.singvogel = singvogel;}public String beschreibung() {String saenger = (singvogel) ? "ein" : "kein";return super.beschreibung() + ", ist "+ saenger + " Singvogel";}}
Klasse TierTest
package s1.block9;public class TierTest {private static Haustier hausTiere[];public static void main(String[] args) {populate();neuerLieblingsvogel();iterate();}public static void populate() {hausTiere = new Haustier[6];hausTiere[0] = new Vogel("Hansi", 50.55f, true);hausTiere[1] = new Vogel("Piep", 50.44f, false);hausTiere[2] = new Hund("Waldi", 222.22f, "Dackel");hausTiere[3] = new Hund("Fiffi", 202.22f, "Terrier");hausTiere[4] = new Katze("Isis", 88.88f, (Vogel) hausTiere[0]);hausTiere[5] = new Katze("Napoleon", 77.77f, null);}public static void neuerLieblingsvogel() {Vogel v;Katze k;if ((hausTiere[1] instanceof Vogel)&& (hausTiere[4] instanceof Katze)) {v = (Vogel) hausTiere[1];k = (Katze) hausTiere[4];k.setVogel(v);}}public static void iterate() {double kosten = 0;for (int i = 0; i < hausTiere.length; i++) {kosten += hausTiere[i].getKostenTierarzt();System.out.println("Art: " + hausTiere[i].getClass().getSimpleName()+ "; " + hausTiere[i].beschreibung());}
System.out.println("Gesamtjahrekosten "+ kosten +" Euro");}}
Ausgaben:
Art: Vogel; Name :Hansi, nicht steuerpflichtig, Kosten: 50.55, ist ein Singvogel
Art: Vogel; Name :Piep, nicht steuerpflichtig, Kosten: 50.44, ist kein Singvogel
Art: Hund; Name :Waldi, steuerpflichtig, Kosten: 222.22, Rasse: Dackel
Art: Hund; Name :Fiffi, steuerpflichtig, Kosten: 202.22, Rasse: Terrier
Art: Katze; Name :Isis, nicht steuerpflichtig, Kosten: 88.88, mag Piep
Art: Katze; Name :Napoleon, nicht steuerpflichtig, Kosten: 77.77, mag keinen Vogel
Gesamtjahrekosten 692.08 Euro
- 5594 views