Interfaces

Fisch f = new Fisch("Nemo",123);
f.laufe();
Java
Tier[] tiere = new Tier[2]; // neues Array für zwei Objekte vom Typ Tier erstellen

Papagei p = new Papagei("Ara",1.3,"Hallo",40);
p.setAnzahlBeine(2);

Loewe leo = new Loewe("Leo",115);
leo.setAnzahlBeine(4);

tiere[0] = p; // p und leo im Array speichern
tiere[1] = leo;

int summe = 0; // in Summe steht am Ende die Gesamtzahl der Beine

for (int i = 0; i<tiere.length; i++) {
    summe += tiere[i].getAnzahlBeine(); // Problem!!
}
Java
for (int i = 0; i<tiere.length; i++) {
    if (tiere[i] instanceof Papagei){
        summe += ((Papagei) tiere[i]).getAnzahlBeine();
    } else if (tiere[i] instanceof Loewe){
        summe += ((Loewe) tiere[i]).getAnzahlBeine();
    }
}
Java

zoohandlung/Laufen.java:

package zoohandlung;

public interface Laufen {
    public void laufe();
    public int getAnzahlBeine();
    public void setAnzahlBeine(int anzahl);
}
Java

zoohandlung/Tier.java:

package zoohandlung;

public abstract class Tier {

    protected String name;
    double gewicht;
    String futterzeit;

    public Tier(){}

    public Tier(String name, double gewicht) {
        this.name = name;
        this.gewicht = gewicht;
    }

    @Override
    public String toString(){
        return "Ich heiße "+name+" und wiege "+gewicht+" kg";
    }
}
Java

zoohandlung/Papagei.java:

package zoohandlung;

public class Papagei extends Tier implements Laufen {

    String lieblingswort;
    double spannweite;
    int anzahlBeine; // ist jetzt hier und nicht mehr in Tier

    public Papagei(String name, double gewicht, String lieblingswort, double spannweite) {
        super(name, gewicht);
        this.lieblingswort = lieblingswort;
        this.spannweite = spannweite;
    }

    public void fliege() {
        System.out.println("Ich fliege");
    }

    public String sprich(String wort) {
        System.out.println(wort);
        return wort;
    }

    @Override
    public void laufe() {
        System.out.println("Ich laufe");
    }

    @Override
    public void setAnzahlBeine(int anzahlBeine) {
        this.anzahlBeine = anzahlBeine;
    }

    @Override
    public int getAnzahlBeine() {
        return anzahlBeine;
    }
}
Java
Tier[] tiere = new Tier[2]; // neues Array für zwei Objekte vom Typ Tier erstellen

Papagei p = new Papagei("Ara",1.3,"Hallo",40);
p.setAnzahlBeine(2);

Loewe leo = new Loewe("Leo",115);
leo.setAnzahlBeine(4);

tiere[0] = p; // p und leo im Array speichern
tiere[1] = leo;

int summe = 0; // in Summe steht am Ende die Gesamtzahl der Beine

for (int i = 0; i<tiere.length; i++) {
    summe += tiere[i].getAnzahlBeine(); // Problem!!
}
Java

externesPackage/ExterneMainKlasse.java:

package externesPackage;

import zoohandlung.*;

public class ExterneMainKlasse {

    public static void main(String[] args) {
        Laufen[] tiere = new Laufen[2]; // neues Array für zwei Objekte vom Typ Laufen erstellen

        Papagei p = new Papagei("Ara", 1.3, "Hallo", 40);
        p.setAnzahlBeine(2);

        Loewe leo = new Loewe("Leo", 115);
        leo.setAnzahlBeine(4);

        tiere[0] = p; // p und leo im Array speichern
        tiere[1] = leo;

        int summe = 0; // in Summe steht am Ende die Gesamtzahl der Beine

        for (int i = 0; i < tiere.length; i++) {
            summe += tiere[i].getAnzahlBeine(); // Jetzt geht alles!
        }
        System.out.println(summe);
    }
}
Java

zoohandlung/Fisch.java:

package zoohandlung;

public class Fisch extends Tier {

    int maxTauchtiefe;
    int anzahlKiemen;

    public Fisch(String name, double gewicht) {
        super(name, gewicht);
    }

    public void schwimme() {
        System.out.println("Ich schwimme!");
    }

    public void blubber(int anzahl) {
        for (int i = 0; i < anzahl; i++) {
            System.out.println("blubb");
        }
    }
}
Java