1

对于我的 Java 类,我们正在学习接口、多态性、继承等。

我正在做的家庭作业是一个记忆游戏,你有一对面朝下的卡片,你一次翻开两张来寻找匹配。如果它们匹配,则它们保持可见,如果它们不匹配,则将牌翻过来,然后再选择两张牌。

到目前为止,我的设计如下:

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

第一的,

默认情况下,它们本质上是抽象的,因为在接口中包含任何实现代码都是非法的abstractinterface.

其次,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 回答