Java在实现具有较弱访问权限的接口方法时出错

时间:2012-10-31 14:50:44

标签: java interface

编译此代码时:

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方法如何被公开?

5 个答案:

答案 0 :(得分:34)

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

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

答案 1 :(得分:8)

interface中的所有方法都隐式public,无论您是否明确声明它。请参阅Java Tutorials Interfaces section

中的详细信息

答案 2 :(得分:5)

interface中的所有方法都隐含public。但如果没有明确提及public,则在类中,它只有包可见性。通过覆盖,您只能提高可见性。你无法降低能见度。因此,将类驼峰中的getGait()的实现修改为

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

答案 3 :(得分:0)

默认情况下,接口字段是公共的,静态的和最终的,方法是公共的和抽象的

因此,在实现接口时,函数调用应为 public 功能应为

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

答案 4 :(得分:-1)

将骆驼类(Rideable的实现类)中的getGait()设置为公共。

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