Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1263 connectés 

  FORUM HardWare.fr
  Programmation

  [java] sous classe

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[java] sous classe

n°34748
lamatrice
Posté le 28-05-2001 à 11:55:56  profilanswer
 

je voudrais faire accélerer la moto et afficher sa vitesse.
 
 
public class Vehicules {
 
public int vitesse=0;
 
public void accel(){
vitesse++;}
 
public class Moto extends Vehicules{
       public Moto kawa=new Moto();
       }
public static void main(String[] args){
 kawa.accel();
 System.out.println(kawa.vitesse);
 }
}

mood
Publicité
Posté le 28-05-2001 à 11:55:56  profilanswer
 

n°34778
DuffBeer
Posté le 28-05-2001 à 13:33:44  profilanswer
 

Et où est ton pb ?

n°34782
lamatrice
Posté le 28-05-2001 à 13:38:21  profilanswer
 

mon prob c'est que ça affiche 0 comme vitesse
alros que je veux exercer la methede dessu pour avoir +1.

n°34791
DuffBeer
Posté le 28-05-2001 à 13:45:48  profilanswer
 

Pour moi le code serait :
 
public class Vehicules {  
 
public int vitesse;  
 
public Vehicules() {
vitesse = 0;}  
 
public void accel(){  
vitesse++;}  
}
 
public class Moto extends Vehicules{  
       [...]
}  
 
public static void main(String[] args){  
Moto kawa = new Moto();
kawa.accel();  
System.out.println(kawa.vitesse);  
}
 
Je n'initialise pas les attributs de classe dans leur définition mais plutôt dans le constructeur (ça sert à ça).
Je pense que tu as d'autres fonctions membres dans Moto sinon ç a ne sert à rien de créer une classe qui hérite de Véhicules (kawa = new Vehicules();).
Dans la classe Moto, tu crées une instance de cette même classe ce qui me semble peu plausible.

 

[edit]--Message édité par DuffBeer--[/edit]

n°34814
[FDS]
Posté le 28-05-2001 à 14:29:26  profilanswer
 

lamatrice a écrit a écrit :

je voudrais faire accélerer la moto et afficher sa vitesse.
 
 
public class Vehicules {
 
public int vitesse=0;
 
public void accel(){
vitesse++;}
 
public class Moto extends Vehicules{
       public Moto kawa=new Moto();
       }
public static void main(String[] args){
 kawa.accel();
 System.out.println(kawa.vitesse);
 }
}




 
Tu as créée une instance de moto au début de la définition de ta classe moto. Tu dois créer cette instance dans ta méthode main.
 
public class Moto extends Vehicules
{
...
    public static void main(String[] args)
    {
        Moto kawa=new Moto();
 kawa.accel();
 System.out.println(kawa.vitesse);
    }
}

n°34838
lamatrice
Posté le 28-05-2001 à 15:19:09  profilanswer
 

oui dans la methode main. mais le problème
c'est que après la moto je veux aussi des camions,bus,train..
et je peux pas tout mettre dans la methode main !
suis-je obligé de créer toute mes objet dans main.
(y a un moyen de les créer dans leurs propre clase)
 
en fait mon prob, c'est d'accéder à une variable d'instance par une methode de classe.

n°34841
DuffBeer
Posté le 28-05-2001 à 15:41:36  profilanswer
 

Je ne comprend pas pourquoi tu ne veux pas instancier tes classes dans le main, c'est de la conception objet : on déclare et on définie des classes puis on instancie ces mêmes classes dans le main.
Une solution intermédiaire serait :
 
public class Vehicules {  
private int vitesse_;  
public int getVitesse() {
return vitesse_;}
public void setVitesse(int vit) {
vitesse_ = vit;}
public Vehicules() {  
setVitesse(0);}    
public void accel(){  
setVitesse(getVitesse()++);}  
}  
public class Moto extends Vehicules{  
       [...]  
}  
public class Camion extends Vehicules{  
       [...]  
}
public class Bus extends Vehicules{  
       [...]  
}    
public class Train extends Vehicules{  
       [...]  
}  
public class Convoi{  
private Moto moto_;
private Camion camion_;
private Bus bus_;
private Train train_;  
public Moto getMoto(){
return moto_;}
public Camion getCamion(){
return camion_;}
public Bus getBus(){
return bus_;}
public Train getTrain(){
return train_;}
public Convoi(){
moto_ = new Moto();
camion_ = new Camion();
bus_ = new Bus();
train_ = new Train();
}  
public static void main(String[] args){  
Convoi convoi_ = new Convoi();  
convoi_.getMoto().accel();  
System.out.println(convoi_.getMoto().getVitesse());    
}
 
J'espère que ça t'aidera et que je n'es pas fait trop de fautes.

 

[edit]--Message édité par DuffBeer--[/edit]

n°34842
lamatrice
Posté le 28-05-2001 à 15:50:12  profilanswer
 

over mega cool !
merci

n°34849
lamatrice
Posté le 28-05-2001 à 16:04:08  profilanswer
 

[citation][nom]DuffBeer a écrit[/nom]Je ne comprend pas pourquoi tu ne veux pas instancier tes classes dans le main, c'est de la conception objet : on déclare et on définie des classes puis on instancie ces mêmes classes dans le main.
 
parce que je débute en POO et que visiblement y a des choses que j'ai pas capté.

n°34861
DuffBeer
Posté le 28-05-2001 à 16:25:45  profilanswer
 

Si tu débutes en POO, je vais te donner quelques indications.
La durée de vie d'une instance est liée à l'endroit où elle se trouve.
exemple 1 :  
public static void main(String[] args){    
Convoi convoi_ = new Convoi();  
        // création des instances moto, bus...
delete convoi_;
        // destruction de toutes les instances puisqu'elles sont liées à l'instance de Convoi
Moto kawa = new Moto();
Bus bubu = new Bus();
        // création des instances Moto et Bus  
delete kawa;
        // destruction de l'instance Moto
} // destruction de l'instance Bus car fin du programme
 
Java a un avantage (ou inconvénient ?), c'est qu'il a un ramasse-miettes, c'est à dire qu'il se charge de gérer la mémoire et libérer les instances lorsqu'il n'en a plus besoin. Par exemple lorsque je détruit l'instance de Convoi, il se charge de détruire les instances des véhicules dans Convoi.
Dans d'autres langages POO (ex : C++), il faut se charger de ça en implémentant le destructeur.
exemple 2 :  
~Convoi(){
delete moto_;
delete bus_;
delete camion_;
delete train_;
}
 
De même, il convient de libérer toutes les instances que tu as déclaré explicitement avant la fin du programme afin de nettoyer la mémoire (dans Java le ramasse-miette s'en charge cf. exemple 1).
 
Et voilà. Simple non ? :sol:

mood
Publicité
Posté le 28-05-2001 à 16:25:45  profilanswer
 

n°34864
lamatrice
Posté le 28-05-2001 à 16:36:18  profilanswer
 

oui je voit pas le rapport avec mes soucis.
 
le garabge collector je l'ai pigé ça.
 
c'est plutôt comment utilisé des variable d'objet dans un main...
main est condamné à utilisé des variable static parce que la methode main est static, et je trouve pas ça limpie. (pour le moment)

n°34881
wouatouwou​atou
Posté le 28-05-2001 à 16:55:34  profilanswer
 

main est obligatoirement static du fait kil est appelé depuis l'exterieur pour executer le process...
Mais cela n'empeche pas ke tu instancie des objets a l'interieur...
 
P.S: dsl, mais jai pas tout lu... des topics...


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
n°34887
wouatouwou​atou
Posté le 28-05-2001 à 16:59:41  profilanswer
 

si tu veux une instance d'une classe.. passe par un getInstance()... com ca ta kune instance ki sera utilisée partout... tu n'aura plus ka gerer des compteurs d'instances.. c un peu le principe du getinstance() de Calendar...
:D
Pour ca, tu fais une methode static getInstance() de ta classe ou tu instancie ton objet... ensuite, tu joue avec les compteurs...
Mais, si tu veux plusieurs instances... de la meme classe.. tu peux aussi faire une methode d'instanciation static ki soccup de tout et te retourne une instance... (un new koi :D )


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
n°34924
[FDS]
Posté le 28-05-2001 à 17:51:08  profilanswer
 

lamatrice a écrit a écrit :

oui je voit pas le rapport avec mes soucis.
 
le garabge collector je l'ai pigé ça.
 
c'est plutôt comment utilisé des variable d'objet dans un main...
main est condamné à utilisé des variable static parce que la methode main est static, et je trouve pas ça limpie. (pour le moment)




 
Tu ne peux pas utiliser des variables d'instance de ta classe  Moto dans le main directement.
 
Dans ton main tu dois d'abord créer une instance et ensuite l'utiliser. Dans ton code kawa est variable d'instance et non de classe.
 
vire la ligne "public Moto kawa=new Moto();" et place dans ton main cette ligne :  
Moto kawa=new Moto();
ensuite tu utilise ton objet kawa et invoque ta méthode accel()
kawa.accel();

n°35032
ragefan
Posté le 29-05-2001 à 08:30:46  profilanswer
 

le probleme viens de l init de la variable membre de la classe moto à 0

n°35039
DuffBeer
Posté le 29-05-2001 à 09:02:32  profilanswer
 

lamatrice> Ce ne sont que des indications, tu prends ce qui t'est utile.
Mon explication avait pour but de montrer qu'il était plus intéressant de distinguer l'instanciation des classes dans le main afin de pouvoir gérer séparément leur durée de vie. (solution de [FDS])
La classe Convoi est une solution alternative, mais je ne pense pas que regrouper les instanciations soient intéressant, en effet de cette façon tu lie la durée de vie de l'instance Convoi avec celles des autres véhicules.
Après, peut-être que tu as un intérêt à faire ça et dans ce cas je pense qu'on te proposera une meilleur solution (avis aux experts JAVA).
 :hello:

n°35044
lamatrice
Posté le 29-05-2001 à 09:17:19  profilanswer
 

désolé d'avoir crée autant de remous, tout ça parce que  
-voulant jouer le caid, j'ai survoler trop vite des chapitres.
 
-et donc en retournant dans le chapirtre sur la methode main, et en le lisant entirèremen (cette fois). j'ai compris son fonctionnement.
du coup ça me semble clair (en tout cas pour la methode main)
 
-par ce que pour ce qui est des interfaces !!.. qu'on implemente chpigkedal mais je reviendrais avec des questions precises en temps voulu. merci à tous.
 
-encor une question, jamais deux sans douze : c'est au niveau des import de classes et du signe * ce symbole represente le niveau et les sous niveau ou pas ? exemple
import java.awt.*    
import java.awt.event
import java.awt.event.*
avec le premier normallement on devrait plus avoir besoin des deux autres import ? (oui ou non)
 
en fait je suis influencé par le symbole sous ms dos "n'importe quelle caractères".

n°35069
wouatouwou​atou
Posté le 29-05-2001 à 10:13:14  profilanswer
 

l'etoile concerne uniquement les classes du package concerné.. les sous packages ne sont pas concernés...


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
n°35074
petoulachi
A fortiori, brigadier chef
Posté le 29-05-2001 à 10:18:15  profilanswer
 

C marrant, habituellement, on en chie avec l'objet plutot au niveau conception et methode ,avec les appels de methodes. Mais a cause du main, c du jamais vu :D


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [java] sous classe

 

Sujets relatifs
[JAVA] Incompatiblités . . .[JAVA] Comment créer un nouveau curseur ?
[java] recherche des exercices sur les portées[Java] Problème de synchronisation sur des servlets.
Question aux programmeurs JAVA... a propos de GEF...[JAVA] decoupage d'un projet en plusieurs fichiers
Pb d'import en Java .......[java] : panel dynamique : addLayoutComponent(String , Component)
Java: La meta classe Class[java] la classe Class
Plus de sujets relatifs à : [java] sous classe


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR