Types incompatibles + des explications sur variables, types, classes etc
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:
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:
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:
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:
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:
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:
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:
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.
Types incompatibles + des explications sur variables, types, classes etc
Bonjour à toutes et à tous,
j'ai résolu le problème de types incompatible pour typeMoteur. Voici les codes modifiés au niveau des déclarations :
Classe Garage
Code:
1 2 3 4 5 6
| public class Garage {
String nomModele;
Moteur typeMoteur;
String cylindre ;
double prixMoteur; |
Classe Vehicule
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| public class Vehicule {
String cylindre;
double prixMoteur;
Moteur typeMoteur;
String nomModele;
public void setMoteur(Moteur type){
this.typeMoteur = type;
}
//On récupère le type de moteur
public Moteur getTypeMoteur(){
return typeMoteur;
}
} |
Classe Moteur
Code:
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;
}
} |
Classe TypeMoteur
Code:
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;
}
} |
Classe MoteurEssence
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| public class MoteurEssence extends Moteur {
String cylindreMoteur;
double prixMoteur;
public MoteurEssence(){
}
public MoteurEssence (String cyl, double prixMot){
this.setTypeMoteur(typeMoteur.ESSENCE);
this.cylindreMoteur = cyl;
this.prixMoteur = prixMot;
}
} |
1 pièce(s) jointe(s)
Types incompatibles + des explications sur variables, types, classes etc
Bonjour Thelvin,
je comprends que vu comme cela, le code est tellement incomplet qu'on se demande bien à quoi il sert. En fait j'ai d'abord voulu résoudre ce problème de typage signalé par le compilateur.
Voici en fait le vrai énoncé de ce problème posé sur le tutoriel :
Vous l’aurez compris, vous allez devoir créer un garage, mais
vous allez devoir aussi le sauvegarder dans un fichier… Le
but étant qu’à chaque fois que vous ajoutez un nouveau
véhicule dans votre garage, celui-ci se sauvegarde
automatiquement dans un fichier. Il faudra aussi
automatiquement charger le garage lors de son instanciation.
Voici le diagramme des classes :
Pièce jointe 471318
Voici la classe de test pour le programme :
Code:
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
| 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));
lag1.addOption(new GPS());
lag1.addOption(new SiegeChauffant());
lag1.addOption(new VitreElectrique());
garage.addVoiture(lag1);// 1..tu créés ta 1ere voiture et tu
// l'ajoutes dans ton garage avec addVoiture.
Vehicule A300B_2 = new A300B();
A300B_2.setMoteur(new MoteurElectrique("1500 W",1234d));
A300B_2.addOption(new Climatisation());
A300B_2.addOption(new BarreDeToit());
A300B_2.addOption(new SiegeChauffant());
garage.addVoiture(A300B_2);// 4.. tu créés ta 2e voiture et tu
// } // l'ajoutes dans ton garage
Vehicule d4_1 = new D4();
d4_1.setMoteur(new MoteurDiesel("200 Hdi", 25684.80d));
d4_1.addOption(new BarreDeToit());
d4_1.addOption(new Climatisation());
d4_1.addOption(new GPS());
garage.addVoiture(d4_1);
Vehicule lag2 = new Lagouna();
lag2.setMoteur(new MoteurDiesel("500 Hdi", 456987d));
garage.addVoiture(lag2);
Vehicule A300B_1 = new A300B();
A300B_1.setMoteur(new MoteurHybride("ESSENCE/Electrique", 12345.95d));
A300B_1.addOption(new VitreElectrique());
A300B_1.addOption(new BarreDeToit());
garage.addVoiture(A300B_1);
Vehicule d4_2 = new D4();
d4_2.setMoteur(new MoteurElectrique("100 KW", 1224d));
d4_2.addOption(new SiegeChauffant());
d4_2.addOption(new BarreDeToit());
d4_2.addOption(new Climatisation());
d4_2.addOption(new GPS());
d4_2.addOption(new VitreElectrique());
garage.addVoiture(d4_2);
}
} |
J'ai aussi d'autres problèmes comme une exception NullPointerException à la compilation.
Enfin, je suis preneur pour tout conseil, toute méthode, toute astuce pour progresser dans mon apprentissage.
Merci.