web-dev-qa-db-fra.com

Java obtient une erreur pour implémenter une méthode d'interface avec un accès plus faible

Quand je compile ce code:

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";
    }
}

Je reçois l'erreur suivante:

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

Comment la méthode getGait est-elle déclarée dans l'interface considérée comme publique?

15
A K

Les méthodes déclarées à l'intérieur de l'interface sont implicitement public. Et toutes les variables déclarées dans l'interface sont implicitement public static final (constantes).

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

Toutes les méthodes d'une interface sont implicitement public, que vous le déclariez explicitement ou non. Pour plus d'informations, reportez-vous à la section Interfaces de didacticiels Java .

8
Keppil

Toutes les méthodes dans interface sont implicitement public. Mais à l'intérieur d'une classe, si public n'est pas mentionné explicitement, il n'a qu'une visibilité sur les packages. En passant outre, vous ne pouvez qu’augmenter la visibilité. Vous ne pouvez pas diminuer la visibilité. Donc, modifiez l’implémentation de getGait() dans la classe chameau comme

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

Les champs d'interface sont publics, statiques et finaux par défaut, et les méthodes sont publiques et abstraites.

Ainsi, lorsque vous implémentez une interface, l’appel de la fonction doit être public La fonction doit être 

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