2 votes

Héritage des classes Java

Aquí il est dit que :

MountainBike dispose ainsi des mêmes champs et méthodes que Bicycle, tout en permettant à son code de se concentrer exclusivement sur les caractéristiques qui le rendent unique. Cela rend le code de vos sous-classes facile à lire. Cependant, vous devez veiller à documenter correctement l'état et le comportement que chaque superclasse définit, car ce code n'apparaîtra pas dans le fichier source de chaque sous-classe.

Cependant, dans mon code, l'héritage ne fonctionne pas correctement, probablement à cause d'une faille dans mon code ?

package java1;

class bicycle {
    int speed = 0;
    int gear = 1;

    void accelerate(int incr) {
        speed = speed + incr;
    }

    void decelerate(int incr) {
        speed = speed - incr;
    }

    void changeGear(int val) {
        gear = val;
    }

    void printInfo() {
        System.out.println("Speed: " + speed + " Gear: " + gear);
    }
}

class mountainbike extends bicycle {
    int speed = 10;
}

public class Main {

    public static void main(String[] args) {

        mountainbike mb1 = new mountainbike();

        mb1.accelerate(20);
        mb1.accelerate(10);

        mb1.printInfo();

    }

}

La classe mountainbike devrait hériter de toutes les caractéristiques de la classe bicycle, non ? J'ai ajouté une propriété unique qui est int speed = 10 La vitesse de départ devrait donc être de 10. Cependant, lors de l'exécution, le compilateur considère que la vitesse de départ est de 0.

Des idées ?

1voto

Mark Basmayor Points 1371

En Java, il existe un concept de scopes . Ce qui se passe, c'est que la variable de vitesse n'est pas réellement remplacée, donc elle est toujours à 0 par défaut.

1voto

erikkallen Points 16601

On ne peut pas surcharger un champ, seulement les méthodes.

class bicycle {
    int getSpeed() {
        return 0;
    }
    // ... other things
}

class mountainbike extends bicycle {
    int getSpeed() {
        return 10;
    }
    // ... other things
}

0voto

rui Points 4282

Vous vous cachez bicycle.speed con mountainbike.speed Ainsi, chaque instance de vélo de montagne a deux variables membres int pour la vitesse, l'une sera this.speed et l'autre this.super.speed .

Au lieu de redéclarer int speed dans mountainbike, vous devriez simplement créer un constructeur par défaut pour mountainbike et définir this.speed = xxx; là-dedans.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X