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
redeclaringwalk()
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, solangeAnimal
deklariert istabstract
. - 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
undctl/command-v
. - Danke für den Tipp (Jcreator)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Methoden in interfaces sind implizit
public
. Die Methoden in den Klassen sind Paket-standardmäßig sichtbar. Sie können nicht reduzieren Sie die Sichtbarkeit einer überschriebenen Methode, d.h. Sie können nicht Sachen wie diese:In deinem Fall die Lösung ist, um zu erklären
walk()
alspublic
imDog
undCat
.Den Fehler eclipse gibt, ist:
Die Methode muss öffentlich sein, weil es definiert eine Schnittstelle.
Interface-Methoden müssen public sein. Sie müssen erklären
walk()
als eine öffentliche Methode in Cat.Machen
String walk()
Implementierungenpublic
. Das wird fix it