1

私の Java クラスでは、インターフェース、ポリモーフィズム、継承などについて学んでいます。

私が取り組んでいる宿題は、カードのペアをすべて裏向きにして、一度に 2 枚ずつ裏返してマッチを探す記憶ゲームです。一致する場合は表示されたままになり、一致しない場合はカードが裏返され、さらに 2 枚のカードを選びます。

これまでの私のデザインは次のとおりです。

public interface Hideable
  public abstract void hide();
  public abstract void show();    

public interface Speakable
  public abstract String speak();

public interface AnimalCard extends Hideable, Speakable
  public abstract boolean equals(Object obj);

public class Animal implements AnimalCard
  public void hide() { ... }
  public void show() { ... }
  public boolean equals(Object obj) { ... }

  // What do I do for the speak method since a generic Animal
  // can't speak, but I have to provide a definition since the
  // Animal class is implementing the interfaces.

public class Puppy extends Animal
  // Here is where I need to define the speak method.
  public String speak() { ... }

私の質問は上記のコメントにあります。speak() メソッドに関して、これを間違って実装しているように感じます。

4

4 に答える 4

4

Animalクラスを作るだけabstractです。
具体的なクラスは、実装するspeak()か、abstractそれ自体である必要があります。

public class abstract Animal implements AnimalCard {
    public void hide() { ... }
    public void show() { ... }
    public boolean equals(Object obj) { ... }

inのabstractメソッドを宣言する必要も価値もありません。そのメソッドは、クラス階層によって暗示されます。speak()Animal

于 2012-11-01T22:16:50.150 に答える
1

インターフェイスの目的は、クラスが特定の方法で動作すること を保証することです。

だからあなたが話しやすいオブジェクトを宣言した場合

Speakable speakingThing = new Puppy();

speakableThingその変数に何を入れても、インターフェースが実行できると言っていること は何でも実行できなければなりません。Speakable


私がやろうとしていることは、AnimalCard実装Speakableを持たず、話すことができる動物だけがインターフェースを実装することです

または、他の人が言ったように、すべての動物が話し、クラスを抽象化するよりも、一般的な動物をインスタンス化することは決してありません(抽象クラ​​スはインスタンス化されません。継承されるのはそこだけです)。

于 2012-11-01T22:11:45.270 に答える
0

この種の変更を行うことができます

 public abstract class  Animal implements AnimalCard{
  public void hide() { }
  public void show() {  }

  public  abstract String speak();
 }
于 2012-11-01T22:15:33.893 に答える
-1

初め、

インターフェイス内に実装コードを含めることは違法であるためabstract、これらはデフォルトで本質的に抽象的です。interface.

第二に、Javaは多重継承をサポートしていないため、次の行:

public interface AnimalCard extends Hideable, Speakable

違法です。

これらの問題を解決したら、問題を解決する最善の方法は、動物カードを抽象化することです。

public abstract Animal extends AnimalCard {
  public void hide() { ... }
  public void show() { ... }
  public boolean equals(Object obj) { ... }  
  public abstract String speak();       
}

public class Puppy extends Animal {
  // Here is where I need to define the speak method.
  public String speak() { ... }
}
于 2012-11-01T22:17:38.277 に答える