无法从Rideable降低继承方法的可见性

时间:2017-06-09 08:48:11

标签: java oop interface

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()方法的访问说明符是什么?

2 个答案:

答案 0 :(得分:2)

接口中声明的方法默认为public

在重写中,我们只能增加范围,我们无法减少它。

在覆盖该方法的类中,您没有提到public,因此默认情况下它认为它是default(包私有)。所以它试图缩小范围,结果你得到了这个错误。

您需要执行以下操作,

@Override
public String getGait(){

}

答案 1 :(得分:0)

扩展包含默认方法的界面时,可以执行以下操作:

  • 根本没有提到默认方法,这可以让你进行扩展 接口继承默认方法。

  • 重新声明默认方法,使其成为抽象方法。

  • 重新定义默认方法,覆盖

您正在尝试执行最后一个操作(即 方法重写 ),但要成功执行此操作,您必须保持方法签名相同。只需添加访问说明符“ public ”:

public String getGait() {
    return " mph, lope"; 
}