18

当我编译这段代码时:

interface Rideable {
    String getGait();
}

public class Camel implements Rideable {
    int x = 2;

    public static void main(String[] args) {
        new Camel().go(8);
    }

    void go(int speed) {
        System.out.println((++speed * x++) 
        + this.getGait());
    }

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

我收到以下错误:

Camel.java:13: error: getGait() in Camel cannot implement getGait() in Rideable
String getGait() {
       ^
  attempting to assign weaker access privileges; was public
1 error

接口中声明的 getGait 方法如何被认为是公共的?

4

5 回答 5

37

在接口内声明的方法是隐式的public。并且接口中声明的所有变量都是隐式的public static final(常量)。

public String getGait() {
  return " mph, lope";
}
于 2012-10-31T14:51:58.697 回答
8

an 中的所有方法interface都是隐式的public,无论您是否显式声明它。请参阅Java 教程接口部分中的更多信息。

于 2012-10-31T14:51:52.940 回答
7

中的所有方法interface都是隐式的public。但是在一个类中,如果没有明确提到 public,它只有包可见性。通过覆盖,您只能增加可见性。你不能降低能见度。所以修改getGait()骆驼类中的实现为

public String getGait() {
    return " mph, lope";
}
于 2016-07-15T09:44:40.290 回答
0

接口字段默认是public、static和final,方法是public和abstract

因此,当您实现接口时,函数调用应该是public Function 应该是

public String getGait() {
  return " mph, lope";
}
于 2018-10-01T08:34:54.430 回答
-1

将 Camel 类(Rideable 的实现类)中的 getGait() 设为公开。

public String getGait() {
        return " mph, lope";
    }
于 2018-11-16T19:10:08.240 回答