Java - 类扩展抽象类并实现具有相同方法的接口

时间:2015-03-18 19:30:32

标签: java oop interface abstract-class

喜欢在主题中。这是一个例子:

public abstract class Bird{
   public abstract void eat();
   public abstract void fly();
}


public interface Flyable{
    public void fly();
}

public class Test extends Bird implements Flyable{
   public void eat(){
      System.out.println("I'm eating");
   }

   // And what's now?
   public void fly(){

   }
}

现在,有一个主要问题。怎么了。是否抛出错误,或者接口和抽象类的fly是相同的?

2 个答案:

答案 0 :(得分:2)

什么都没发生。只需在fly()中实现您的逻辑并感到高兴。

答案 1 :(得分:2)

如果方法具有相同的签名,一切都会好的。也可以在抽象类中实现实现,或者实现在类的多个接口中指定的方法。

在Java中,方法由其名称及其参数标识。因此,已实现的方法返回类型必须与所有具有相同标识符的指定方法的所有返回类型兼容。这同样适用于 throw子句。如果实现的方法的返回类型或throw子句不兼容,则会出现编译错误。

此示例无效:

public interface Flyable {
  void eat();
  void fly();
}

public abstract class Bird {
  public int eat() {
    return 500;
  }

  public void fly() throws StallException {
  }
}

public class Eagle extends Bird implements Flyable {
}
  

Eagle.java,行1StallException的throws子句中的异常Bird.fly()Flyable.fly()不兼容

     

Eagle.java,行1:返回类型与继承的方法Flyable.eat()Bird.eat()

不兼容