IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Erreur sur l'implémentation d'une interface


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 106
    Points : 47
    Points
    47
    Par défaut Erreur sur l'implémentation d'une interface
    Bonjour,
    Je suis débutant en JAVA et je ne comprends pas l'erreur que j'ai faite dans mon code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    interface Personne
    {
    	Personne change(String t);
    	String telephone();
    }
     
    class Person implements Personne {
    	private String nom ;
    	private String prenom ;
    	private String tel ;
    	// Constructeur d'instances Person qui implémente, en même temps, le type Personne
    	Person(String n, String p, String t)
    	{
    		nom = n ;
    		prenom = p;
    		tel = t;
    	}
    	public Person change(String t)
    	{
    		tel = t;
    		return this;
    	}
    	public String telephone()
    	{
    		return tel;
    	}
    	public String toString()
    	{
    		return "(" + nom +" " + prenom +" : " + tel + ")";
    	}
    }
     
    // programme utilisateur de la classe Personne
    public class MesAmis {
    	public static void main (String[] args) {
    		System.out.println("Creation de a1 et de a2 ");
    		try {
    			Personne a1 = new Person("Durand", "Paul", "34 75") ;
    			Personne a2 = new Person("Sinclair", "Jane", "35 45") ;
    			System.out.println("Mon ami a1 : " + a1);
    			System.out.println("Mon ami a2 : " + a2);
    			System.out.println("Telephone de a1 est : " + a1.telephone());
    			a1.change("25 48");
    			System.out.println("Maintenant, c'est : " + a1.telephone());
    		} catch(Exception e) { System.out.println("Attention : " + e); 
    		}
    		System.out.println("FIN");
    	}
    }
    En execution, j'ai le résultat suivant :

    Exception in thread "main" Creation de a1 et de a2
    Mon ami a1 : (Durand Paul : 34 75)
    Mon ami a2 : (Sinclair Jane : 35 45)
    Telephone de a1 est : 34 75
    java.lang.AbstractMethodError: Person.change(Ljava/lang/StringLPersonne;
    at MesAmis.main(MesAmis.java:45)

    Je ne comprends pas pourquoi eclipse veut que je mettes une variable de sortie de type Personne alors que pour moi la variable de sortie doit être de type Person.

  2. #2
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 797
    Points
    4 797
    Par défaut
    Ben c'est assez cafouilleux...

    Tu mélanges allègrement interface et méthode factory.

    Bon, le but de l'opération c'est bien de changer le téléphone d'un objet Person ?

    Dans ce cas, tu vas :
    1) commencer par retirer l'interface Personne qui fait planter la compilation (on y reviendra plus tard)
    2) respecter les règles de mutation en utilisant une méthode commençant par "set" pour le téléphone:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    class Person {// on supprime : implements Personne
     
            .
            .
            .
     
    	// pas bon : public Person change(String t)
    	public void setTelephone(String t)
    	{
    		tel = t;
    		// pas bon : return this;
    	}
     
    	// pas bon : public String telephone()
    	public String getTelephone()
    	{
    		return tel;
    	}
    enfin dans le main tu remplaces :
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a1.setTelephone("25 48");
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    On peut tout-à-fait écrire une méthode comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public interface Person {
     
       Person change(String t);
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class Person implements Person {
     
       @OverRide
       public Personne change(String t) {
           return this;
       }
     
    }
    Simplement, je pense, qu'après avoir testé sans cette méthode, que tu as ajouté cette méthode dans l'interface, et la classe concrète (Personne), ajouter l'appel dans MesAmis, puis tu n'as compilé que la classe MesAmis et exécuter MesAmis. Alors qu'il aurait fallut compiler également l'interface et la classe concrète, dont les sources ont été modifiée également.

    Pourquoi ça n'affiche une AbstractMethodError, plutôt qu'une NoSuchMethodError : je ne sais plus. En tout cas, dans ce cas le message d'erreur prend en référence la méthode de l'interface qui retourne bien du Personne.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  4. #4
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 106
    Points : 47
    Points
    47
    Par défaut
    Je suis d'accrod avec vous Népomucène.
    Il y a quelques erreurs sur les nom des accesseurs et des modificateurs.
    J'ai appris qu'il fallait des Get et des Set.
    Le soucis est que ce code a été fait par mon prof du Cnam.
    Le but était juste de recopier le code et de le tester.
    J'ai remarqué en ajoutant un @override que eclipse ma demandé de changer de jre.
    Depuis je n'ai plus d'anomalie et le programme fonctionne correctement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur sur l'initialize d'une notessession
    Par fafonso dans le forum Général VBA
    Réponses: 16
    Dernier message: 17/11/2006, 10h33
  2. Liste des implémentations d'une interface
    Par YokoSop dans le forum Langage
    Réponses: 12
    Dernier message: 07/07/2006, 23h37
  3. Réponses: 5
    Dernier message: 23/02/2006, 00h34
  4. Erreur sur l'ouverture d'une fenêtre popup
    Par misa dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 25/11/2005, 15h21
  5. [Pl/pgSQL] Erreur sur l'execution d'une fonction.
    Par Floréal dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 25/09/2005, 00h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo