Bonjour à toutes et à tous,

j'ai repris en le simplifiant un exercice sur la création d'un garage :
dans mon cas j'ai :
- une classe garage qui va faire écrire le modèle d'une voiture, le type de son moteur...
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
public class Garage {
 
    String nomModele;
    TypeMoteur typeMoteur;
    String cylindre ;
    double prixMoteur;
 
    Garage() {      
    }
 
        public String toString() {
        String str= "Voiture modèle " + nomModele + " "
                + typeMoteur + "  " + cylindre 
                + " prix du moteur : " + prixMoteur + " €";
        return str;
    }
 
}
- une classe Vehicule que voici :

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
public class Vehicule {
 
    String cylindre;
    double prixMoteur;
    TypeMoteur typeMoteur;
    protected String nomModele;
 
    public Vehicule(){       
    }
 
    public void setMoteur(TypeMoteur type){
        this.typeMoteur = type;
    }
 
    // On retourne le nom du modèle
    public String getNomModele()
    {return nomModele;}
 
    // On récupère la cylindrée :
    public String getCylindre(){
        return cylindre;
    }
 
    // On récupère le prix de moteur
    public double getPrixMoteur(){
        return prixMoteur;
    }
 
    //On récupère le type de moteur
    public TypeMoteur getTypeMoteur(){
        return typeMoteur;
    }
 
}
- une classe Lagouna qui hérite de Vehicule pour le nom du modèle :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
public class Lagouna extends Vehicule{
 
    public Lagouna(){     
    }
 
    public String getLagouna(String nomModele){
        this.nomModele = "Lagouna";
        return this.nomModele;
    }
 
}
- Une classe Moteur :

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
public class Moteur {
    protected TypeMoteur typeMoteur;
    protected double prixMoteur;
 
 
    public TypeMoteur getTypeMoteur()
    {return typeMoteur;}
 
    public double getPrixMoteur()
    {return prixMoteur;}
 
    public void setTypeMoteur (TypeMoteur type){
        this.typeMoteur = type;
    }
}
-Une classe TypeMoteur qui est en fait une enum :

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
public enum TypeMoteur {
   ESSENCE ("ESSENCE");
 
   private String typeMoteur = "";
 
   // Constructeur par défaut
   TypeMoteur(String typeMoteur){
 
   }
 
   public void setTypeMoteur(String type){
           this.typeMoteur = type;
   } 
 
   public String toString(){
       return typeMoteur;
   }
}
- Une classe MoteurEssence qui hérite de la classe Moteur :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
public class MoteurEssence extends Moteur {
 
    String cylindreMoteur;
    double prixMoteur;
 
    public MoteurEssence (String cyl, double prixMot){
        this.setTypeMoteur(typeMoteur.ESSENCE);
        this.cylindreMoteur = cyl;
        this.prixMoteur = prixMot;
    }
 
}
- Et enfin la classe de test que voici :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class ZERO_TEST_1 {
 
 
    public static void main(String[] args) {
 
        Garage garage = new Garage();
        System.out.println (garage);
 
 
        Vehicule lag1 = new Lagouna();
        lag1.setMoteur(new MoteurEssence ("150 Chevaux", 10256d));
 
 
    }
A la compilation j'obtiens ce message qui concerne la dernière ligne de ce code
" lag1.setMoteur(new MoteurEssence ("150 Chevaux", 10256d));" :

error : incompatible types: MoteurEssence cannot be converted to TypeMoteur

Je comprends bien qu'il y a un problème de type la dedans.

Sachant que je suis un triple zéro j'aimerais comprendre un peu tout dans ce code, à savoir :

- comment corriger l'erreur à la compilation,

- quand dans la ligne
" lag1.setMoteur(new MoteurEssence ("150 Chevaux", 10256d));"
on instancie un objet MoteurEssence, que se passe-t-il ?

Je suis paumé sur ces histoires de typeMoteur, Moteur, MoteurEssence, d'objet, y compris sur cette instruction : " this.setTypeMoteur(typeMoteur.ESSENCE);"....

Enfin, voilà, en gros je n'y comprends pas grand chose, alors si une âme charitable pouvait m'éclaircir sur tout cela je lui en serait infiniment reconnaissant.

Par avance merci.