Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java类扩展抽象类并实现具有相同方法的接口_Java_Oop_Interface_Abstract Class - Fatal编程技术网

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

Java类扩展抽象类并实现具有相同方法的接口,java,oop,interface,abstract-class,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.ou

喜欢这个话题。下面是一个例子:

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是相同的?

什么都没有发生。只要在
fly()
中实现您的逻辑,就可以快乐了

什么也没发生。只要在
fly()
中实现您的逻辑,就可以快乐了

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

在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
,第
1行
:Bird.fly()的throws子句中的异常
StallException
Flyable.fly()不兼容

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


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

在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
,第
1行
:Bird.fly()
的throws子句中的异常
StallException
Flyable.fly()不兼容

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


您可以实现该方法。不会抛出任何错误。请确保您可以实现该方法。不会抛出任何错误。请看