Java die abstrakte Klasse implementiert das interface

Habe ich die folgende Schnittstelle und abstrakte Klasse implementiert:

interface Walk {
    String walk();
}

public abstract class Animal implements Walk {
    abstract String MakeNoise();
}

Und folgende konkrete Implementierungen:

class Cat extends Animal {
    String MakeNoise() {
        return "Meow";
    }

    @Override
    String walk() {
        return "cat is walking";
    }
}

class Dog extends Animal {
    @Override
    String walk() {
        return "Dog is walking";
    }

    @Override
    String MakeNoise() {
        return "bark";
    }
}

class Human {
    public void Speak() {
        System.out.println("...Speaking...");
    }
}

Alles zusammen:

class MainClass {
    public static void main(String[] args) {
        Random randomGen = new Random();

        Animal[] zoo = new Animal[4];
        zoo[0] = new Cat();
        zoo[1] = new Dog();
        zoo[2] = new Cat();
        zoo[3] = new Cat();
        //System.out.println(zoo[ randomGen.nextInt(2)].MakeNoise());
        for (Animal animal : zoo) {
            if (animal instanceof Dog) {
                Dog jeffrey = (Dog) animal;
                System.out.println(jeffrey.MakeNoise());
            }

        }
    }
}

Bekomme ich diesen Fehler

"Fuss() in Katze nicht implementieren kann (zu Fuss) an der Walk" .

Irgendwelche Ideen? Dank

  • Das ist nicht das was der Fehler sagt.
  • sorry das ich es bearbeitet
  • eine Frage meiner eigenen.... sollten Tier-bieten eine "Implementierung" (auch wenn es eine abstrakte Methode) zu Fuß()?
  • Ich habe immer noch Zweifel, dass ist das was der Fehler sagt. Wenn Sie möchten, effektiv helfen, wirksamen Informationen: kopieren Sie die Fehlermeldung wörtlich zu deiner Frage.
  • Wie funktioniert Animal redeclaring walk() als abstrakte Methode machen, dass es eine "Umsetzung"? Es hätte absolut keine Wirkung, außer auf den Stil. Oder vielmehr, wenn Sie sich Fragen, wenn es braucht, um so zu tun, die Antwort ist Nein, tut es nicht, solange Animal deklariert ist abstract.
  • ja ich weiß, ich bin nur Fragen über den Stil Teil. Es würde scheinen einfach mehr regelmäßig, wenn jede Klasse, die "implementiert" Schnittstelle hatte zu erklären, werden die interface-Methoden, auch wenn die Klasse selbst (und die Methode) war Abstrakt.
  • Sie argumentieren könnte, ein paar Punkte oder so, aber nicht redeclaring macht es einfacher, ändern Sie die Schnittstelle. Wenn Sie nicht die @Override annotation es ist ein wenig mehr gefährlich zu deklarieren, die Methoden. Die einzige Verstärkung die ich denken kann, für eine neudeklaration ist, so können Sie im Voraus sehen, was umgesetzt werden muss, aber das ist, was IDEs sind für die IMO.
  • Bei der Eingabe Fehlermeldungen, die nur Tasten Ihre Finger sollten sich berühren ctl/command-c und ctl/command-v.
  • Danke für den Tipp (Jcreator)

InformationsquelleAutor Marin | 2011-12-14
Schreibe einen Kommentar