Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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. smile


       
       
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 roll
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
wink

Hors ligne