interface Rideable {
String getGait();
}
public class Test implements Rideable {
int weight = 2;
String getGait() {
return " mph, lope";
}
void go(int speed) {
++speed; weight++;
int walkrate = speed * weight;
System.out.print(walkrate + getGait());
}
public static void main(String[] args) {
new Test().go(8);
}
}
为什么会出现上述错误?
在运行时,我得到编译失败
Test类中getGait()方法的访问说明符是什么?
答案 0 :(得分:2)
接口中声明的方法默认为public
。
在重写中,我们只能增加范围,我们无法减少它。
在覆盖该方法的类中,您没有提到public
,因此默认情况下它认为它是default
(包私有)。所以它试图缩小范围,结果你得到了这个错误。
您需要执行以下操作,
@Override
public String getGait(){
}
答案 1 :(得分:0)
扩展包含默认方法的界面时,可以执行以下操作:
根本没有提到默认方法,这可以让你进行扩展 接口继承默认方法。
重新声明默认方法,使其成为抽象方法。
重新定义默认方法,覆盖。
您正在尝试执行最后一个操作(即 方法重写 ),但要成功执行此操作,您必须保持方法签名相同。只需添加访问说明符“ public ”:
public String getGait() {
return " mph, lope";
}