我有两个界面.首先:
public interface IGoable {
int go();
}
第二个使用第一个接口作为方法定义中的参数类型:
public interface IMove {
int move(IGoable goThisMany);
}
我有一个实现IGoable接口的类:
public class ImplGoable implements IGoable {
@Override
public int go() {
return 0;
}
public int dumby() {
return 1;
}
}
这是问题所在.我在一个类中实现IMove接口,并尝试将ImplGoable类用作已实现的move()方法中的参数,如下所示:
public class TestGoThere implements IMove {
@Override
public int move(ImplGoable goImp) {
return goImp.go();
}
}
它给了我以下错误:
The method move(ImplGoable) of type TestGoThere must override or
implement a supertype method
为了避免错误,我必须使用IGoable接口作为已实现方法中参数的类型,如下所示:
public class TestGoThere implements IMove {
@Override
public int move(IGoable goImp) {
return goImp.go();
}
}
我为什么不能使用ImplGoable类,因为它实现了IGoable接口?
解决方法:
您不能在IGoable的地方使用ImplGoable,因为在声明中您仅使用IGoable接口设置了协定.ImplGoable将实现并重写接口方法,但不会阻止它添加新方法.
由于合同的限制,只能使用接口中定义的方法(即go()),因此可以使用goImp对象,但只能在其合同范围内
这意味着该对象可以是实现该接口的任何有效对象,但是类型仅需为IGoable
标签:java
来源: https://codeday.me/bug/20191024/1923116.html