#1 Le 28/04/2011, à 18:11
- Destroyers
Programme en JAVA. Problème de constructeur et d'héritage [RESOLU]
Bonjour à tous, les 4 classes suivantes composent mon programme. Mon problème se trouve dans la classe Ultra_voiture, au niveau du constructeur: public Ultra_voiture(double valeurvitesse){valeurvitesse = vitesse;}
1) Qui peut m'aider pour analyser comprendre et corriger se problème ?
2) Les Attributs (variables membres) sont-ils transmis par l'héritage ?
Merci.
public class Voiture {
static int vitesse = 0;
public Voiture(int valeurvitesse){
valeurvitesse = vitesse;
}
public void démarrer(){
System.out.println("Démarrage de la voiture");
}
public void arrêt(){
System.out.println("Arrêt de la voiture");
}
public int rouler(int durée){
int distance = durée * vitesse;
System.out.println("j'ai parcouru" + distance + "Km aujourd'hui, j'ai un bon moteur" );
return distance;
}
--------------------------------------------------------------------------------------------------------------------------------------
}
public class Ultra_voiture extends Voiture{
public Ultra_voiture(int valeurvitesse){
valeurvitesse = vitesse;
}
public double rouler (double durée){
double distance = durée * vitesse * 1.5;
System.out.println("c'est vraiment super d'avoir une Ultra voiture, j'ai fait " + distance+" Km !");
return distance;
}
}
-----------------------------------------------------------------------------------------------------------------------------------------
public class Propriétaire {
public static void main(String[]args){
Voiture Caisse = new Voiture(130);
Caisse.démarrer();
Caisse.rouler(5);
Caisse.arrêt();
}
}
-----------------------------------------------------------------------------------------------------------------------------------------
public class Propriétaire_ultra_voiture {
public static void main(String[]args){
Ultra_voiture Caisse = new Ultra_voiture(130);
Caisse.démarrer();
Caisse.rouler(5);
Caisse.arrêt();
}
}
Dernière modification par Destroyers (Le 29/04/2011, à 17:30)
Hors ligne
#2 Le 29/04/2011, à 09:18
- Lumin0u
Re : Programme en JAVA. Problème de constructeur et d'héritage [RESOLU]
déja oui, les attributs se transmettent par l'héritage (c'est un des principes).
il y a 2 problèmes dans ton code:
- vitesse dans Voiture ne doit pas être static (static ça veut dire que la variable appartient à la classe et pas aux instances, c'est à dire qu'il en existe et qu'il en existera toujours 1 seul exemplaire, et que chaque instance de Voiture n'aura pas sa propre variable vitesse).
- tu te trompes de sens dans l'affection: "vitesse = valeurvitesse;" et non pas "valeurvitesse = vitesse;".
Hors ligne
#3 Le 29/04/2011, à 14:04
- Destroyers
Re : Programme en JAVA. Problème de constructeur et d'héritage [RESOLU]
Merci beaucoup, en effet l'ordre est important
Mais malgré ces deux modification décisives, il y a toujours un problème dans mon constructeur ...
il est écrit dans mes messages d'erreurs:
"implicit super constructor voiture() is undefined. Must explicitly invoke another constructor."
Dernière modification par Destroyers (Le 29/04/2011, à 15:04)
Hors ligne
#4 Le 29/04/2011, à 15:00
- Uda
Re : Programme en JAVA. Problème de constructeur et d'héritage [RESOLU]
Si mes souvenirs en java sont bons, je crois qu'il faut que tu écrives le constructeur de Ultra_voiture de la façon suivante :
public Ultra_voiture(int valeurvitesse){
super(valeurvitesse);
}
Comme il n'y a pas de constructeur par défaut dans voiture, le compilateur n'est pas capable d'initialiser l'instance de base.
Il faut donc faire un appel explicite à un des constructeurs de la classe de base.
Dernière modification par Uda (Le 29/04/2011, à 15:00)
Hors ligne
#5 Le 29/04/2011, à 15:04
- Destroyers
Re : Programme en JAVA. Problème de constructeur et d'héritage [RESOLU]
La vache ! Mais t'as raison ! ^^ Sa marche.
En plus je l'ai lu hier soir, et j'ai même pas fait le rapprochement avec mon problème.
Franchement, merci beaucoup.
Hors ligne
#6 Le 29/04/2011, à 15:07
- claudius01
Re : Programme en JAVA. Problème de constructeur et d'héritage [RESOLU]
Bonjour,
Je te propose les évolutions suivantes:
class Ultra_voiture extends Voiture {
public Ultra_voiture(int valeurvitesse) {
super(valeurvitesse); // Appel au constructeur non implicite de Voiture
//vitesse = valeurvitesse;
}
...
class Propriétaire_ultra_voiture {
public static void main(String[] args) {
Ultra_voiture Caisse = new Ultra_voiture(130);
Caisse.démarrer();
Caisse.rouler(5.0); // 5.0 au lieu de 5 car signature de 'public double rouler(double durée)' de Ultra_voiture
Caisse.arrêt();
}
...
qui permettent, sauf erreur d ema part, d'avoir ce que tu attends:
Test de Propriétaire...
Démarrage de la voiture
j'ai parcouru 650Km aujourd'hui, j'ai un bon moteur
Arrêt de la voiture
Test Propriétaire_ultra_voiture...
Démarrage de la voiture
c'est vraiment super d'avoir une Ultra voiture, j'ai fait 975.0 Km !
Arrêt de la voiture
En espérant d'avoir aidé...
Cordialement, A+
--
Claudius
Hors ligne
#7 Le 29/04/2011, à 15:11
- Destroyers
Re : Programme en JAVA. Problème de constructeur et d'héritage [RESOLU]
Merci toi aussi, Claudius01, tu m'apporte des infos complémentaires utiles au sujet du
// 5.0 au lieu de 5 car signature de 'public double rouler(double durée)' de Ultra_voiture
Hors ligne