相关疑难解决方法(0)

使用相同的方法在类中实现两个接口.覆盖哪种接口方法?

两个具有相同方法名称和签名的接口.但是由单个类实现,那么编译器将如何识别哪个接口的方法是什么?

例如:

interface A{
  int f();
}

interface B{
  int f();
}

class Test implements A, B{   
  public static void main(String... args) throws Exception{   

  }

  @Override
  public int f() {  // from which interface A or B
    return 0;
  }
}   
Run Code Online (Sandbox Code Playgroud)

java overriding interface

223
推荐指数
6
解决办法
14万
查看次数

接口中的协变返回类型不通过Javac进行编译

我有以下结构:

public interface BarReturn {}
public interface FooReturn {}
public interface FooBarReturn extends FooReturn, BarReturn {}

public interface Foo {  
  FooReturn fooBar( );
}

public interface Bar {
  BarReturn fooBar();
}

public interface FooBar extends Foo, Bar {
  FooBarReturn fooBar();
}
Run Code Online (Sandbox Code Playgroud)

Javac失败并显示以下消息:

FooBar.java:2: types Bar and Foo are incompatible; both define fooBar(), but with unrelated return types
public interface FooBar extends Foo, Bar {
       ^
1 error
Run Code Online (Sandbox Code Playgroud)

但是,Eclipse可以很好地编译它,并且据我所知它应该编译--FooBar的fooBar()方法通过使用协变返回来满足Foo和Bar的fooBar()方法的约定.

这是Eclipse编译或javac中的错误吗?或者有没有办法说服javac编译它?作为参考,我的javac选项如下所示:

javac -d /tmp/covariant/target/classes -sourcepath /tmp/covariant/src/main/java: /tmp/covariant/src/main/java/Foo.java /tmp/covariant/src/main/java/BarReturn.java /tmp/covariant/src/main/java/FooBarReturn.java /tmp/covariant/src/main/java/Bar.java /tmp/covariant/src/main/java/FooReturn.java /tmp/covariant/src/main/java/FooBar.java …
Run Code Online (Sandbox Code Playgroud)

java eclipse javac covariant

9
推荐指数
1
解决办法
1400
查看次数

标签 统计

java ×2

covariant ×1

eclipse ×1

interface ×1

javac ×1

overriding ×1