Interfejsy - przykład użycia na zwierzętach

0

Treść zadania
Klasa abstrakcyjna zwierze ma 2 metody abstrakcyjne je i oddycha i mamy do dyspozycji kilka interfejsów takich jak bieganie skakanie, latanie pływanie. Są klasy dzidziczące np kot, kaczka, kangur, ryba dodać metody np jak pływa to z predkością i na jakiej głębokości itp.

Pytanie czy poprawnie rozwiązałem to zadanie i czy o to chodziło prowadzącemu zajęcia ?
Klasa abstrakcyjna:

package zwierzaki;

public abstract class Zwierze {
    
    public abstract void jedz();
    public abstract void oddychaj();
    
}

Interfejsy:

package zwierzaki;

public interface Bieganie {
    
    public void biegnij();
} 
package zwierzaki;

public interface Skakanie {
    
    public void skacz();
}
package zwierzaki;

public interface Latanie {
    
    public void lec();
    
}
package zwierzaki;

public interface Plywanie {
    
    public void plyn();
    
}
package zwierzaki;

public class Kot extends Zwierze implements Bieganie, Skakanie {
    
    private double predkosc;
    private double wysokosc;

    public Kot(double predkosc, double wysokosc) {
        this.predkosc = predkosc;
        this.wysokosc = wysokosc;
    }

    @Override
    public void jedz() {
        System.out.println("Jem karmę dla kotów. ");
    }

    @Override
    public void oddychaj() {
        System.out.println("Jestem kotem. Oddycham powietrzem.");
    }

    @Override
    public void biegnij() {
        System.out.println("Biegne z predkoscia: " + this.predkosc + "km/h");
    }

    @Override
    public void skacz() {
        System.out.println("Skacze na wysokosc: " + this.wysokosc + "m");
    }

    public double getPredkosc() {
        return predkosc;
    }

    public void setPredkosc(double predkosc) {
        this.predkosc = predkosc;
    }

    public double getWysokosc() {
        return wysokosc;
    }

    public void setWysokosc(double wysokosc) {
        this.wysokosc = wysokosc;
    }
    
}
package zwierzaki;

public class Kaczka extends Zwierze implements Plywanie, Latanie {
    
    private double predkosc;
    private double wysokoscLotu;

    public Kaczka(double predkosc, double wysokoscLotu) {
        this.predkosc = predkosc;
        this.wysokoscLotu = wysokoscLotu;
    }
    
    @Override
    public void jedz() {
        System.out.println("Jem. Jestem kaczka");
    }

    @Override
    public void oddychaj() {
        System.out.println("Oddycham. ");
    }

    @Override
    public void plyn() {
        System.out.println("Plyne z predkoscia: " + this.predkosc +" km/h");
    }

    @Override
    public void lec() {
        System.out.println("Lece na wysokosci: " + wysokoscLotu +" m");
    }

    public double getPredkosc() {
        return predkosc;
    }

    public void setPredkosc(double predkosc) {
        this.predkosc = predkosc;
    }

    public double getWysokoscLotu() {
        return wysokoscLotu;
    }

    public void setWysokoscLotu(double wysokoscLotu) {
        this.wysokoscLotu = wysokoscLotu;
    }
    
}
package zwierzaki;

public class Kangur extends Zwierze implements Skakanie{
    
    private double wysokosc;

    public Kangur(double wysokosc) {
        this.wysokosc = wysokosc;
    }
    
    @Override
    public void jedz() {
        System.out.println("Jem! Jestem kangurem");
    }

    @Override
    public void oddychaj() {
        System.out.println("Oddycham.");
    }

    @Override
    public void skacz() {
        System.out.println("Skacze na wysokosc: " + this.wysokosc + "m.");
    }

    public double getWysokosc() {
        return wysokosc;
    }

    public void setWysokosc(double wysokosc) {
        this.wysokosc = wysokosc;
    }
    
}
package zwierzaki;

public class Ryba extends Zwierze implements Plywanie{
    
    private double glebokosc;
    private double predkosc;

    public Ryba(double glebokosc, double predkosc) {
        this.glebokosc = glebokosc;
        this.predkosc = predkosc;
    }
    
    @Override
    public void jedz() {
        System.out.println("Jem co znajdę w wodzie. Jestem ryba. ");
    }

    @Override
    public void oddychaj() {
        System.out.println("Oddycham skrzelami tlenem rozpuszczony w wodzie.");
    }

    public double getGlebokosc() {
        return glebokosc;
    }

    public void setGlebokosc(double glebokosc) {
        this.glebokosc = glebokosc;
    }

    public double getPredkosc() {
        return predkosc;
    }

    public void setPredkosc(double predkosc) {
        this.predkosc = predkosc;
    }

    @Override
    public void plyn() {
        System.out.println("Płynę z predkością: " + this.predkosc + 
                "na głebokości: " + this.glebokosc +".");
    }
    
}
package zwierzaki;

public class Zwierzaki {

    public static void main(String[] args) {
        
        //kot ok
        //kaczka ok
        //kangur 
        //ryba ok
        
        Kot kot = new Kot(3,0.2);
        kot.jedz();
        kot.oddychaj();
        kot.biegnij();
        kot.skacz();
        
        Kaczka kaczka = new Kaczka(2, 0.5);
        kaczka.jedz();
        kaczka.oddychaj();
        kaczka.plyn();
        kaczka.lec();
        
        Kangur kangur = new Kangur(3);
        kangur.jedz();
        kangur.oddychaj();
        kangur.skacz();
        
        Ryba ryba = new Ryba(7, 10);
        ryba.jedz();
        ryba.oddychaj();
        ryba.plyn();
    }
}
1

Prawie ;] W twoim przykładzie wcale nie widać po co te klasy abstrakcyjne i te interfejsy :)
Patrz np.:

public static void main(String[] args){
  funkcja(new Ryba(7, 10));
  funkcja2(new Ryba(7, 10));
}

public static void funkcja(Zwierze jakiesZwierze){
  jakiesZwierze.jedz();
  jakiesZwierze.oddychaj();
}

public static void funkcja2(Plywanie cosCoPlywa){
  cosCoPlywa.plyn();
}

Masz teraz metody które wykonują pewne operacje ze zwierzątkami, nie wiedząc wcale z jakim zwierzęciem mają w tej chwili do czynienia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1