2017-05-19 6 views
-2

J'ai une interface comestible, une classe Location et une classe Strawberry qui implémente Edible. Je peux compiler et courir sans aucun problème. Je pensais cependant qu'une classe implémentant une interface devait inclure toutes les méthodes d'interface. Ma question est, pourquoi je ne reçois pas d'erreur avec ce code, étant donné que Strawberry implémente Edible mais n'inclut pas une méthode getLocation? Si je change le type de retour de getLocation à une primitive, j'obtiens l'erreur que je recherche. Le renvoi d'un type personnalisé fait-il une différence? Si oui, pourquoi?Interface Java - Type de retour personnalisé?

public interface Edible { 

    Location getLocation(); 

} 

public class Location { 
    private String name; 

    public Location(String n){ 
    name = n; 
    } 
} 

public class Strawberry implements Edible{ 
    int cals; 
    Location location; 

    public Strawberry(int c, Location l){ 
    cals = c; 
    location = l; 
    } 
} 
+9

Ce code génère en effet une erreur de compilation. Etes-vous sûr d'avoir collé le code ** exact ** ici? – Mureinik

Répondre

0

Je collé le code dans Eclipse 4.6.3 configuré avec jdk1.8.0_111 et obtenir l'erreur suivante: The type Strawberry must implement the inherited abstract method Edible.getLocation() Strawberry.java /test/src line 1 Java Problem

Vous pouvez rendre la classe Strawberry abstract, ou implémenter getLocation().

Les deux approches corrigent l'erreur de compilation.

Modifier: Pas besoin d'aide IDE, le code donné ne peut pas fonctionner, l'implémentation manquante. Faire une classe abstraite ou une méthode d'implémentation.

Edit2: Pour référence, un exemple de travail, qui met en œuvre le serait comme suit la méthode getLocation() définie dans l'interface comestible,:

public class Strawberry implements Edible { 
    int cals; 
    Location location; 

    public Strawberry(int c, Location l) { 
     cals = c; 
     location = l; 
    } 

    @Override 
    public Location getLocation() { 
     return location; 
    } 
} 
+0

Merci! Je vois ce qui est arrivé maintenant! La classe Strawberry étend une classe LivingThing, et cette classe a une méthode getLocation! Merci pour le point dans la bonne direction. – Paul

+0

Je ne suis pas sûr si vous l'avez bien compris. Tout d'abord, il n'y a pas de classe LivingThing dans votre exemple de code. Et d'autre part, votre code se lit comme suit: La classe Strawberry implémente l'interface Comible – ratech