Java получает ошибку для реализации интерфейса с более слабым доступом

Когда я скомпилирую этот код:

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 в рассматриваемом интерфейсе?

Ответы

Ответ 1

Методы, объявленные внутри интерфейса, неявно public. И все переменные, объявленные в интерфейсе, неявно public static final (константы).

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

Ответ 2

Все методы в interface неявно public, независимо от того, объявляете ли вы это явно или нет. Дополнительную информацию см. В разделе Интерфейсы Java Tutorials.

Ответ 3

Все методы в interface неявно public. Но внутри класса, если публикация не упоминается явно, она имеет только видимость пакета. Благодаря переопределению вы можете увеличить видимость. Вы не можете уменьшить видимость. Поэтому измените реализацию getGait() в классе верблюда как

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