bonjour,
j'ai pas bien saisie la différence entre une classe et instance d'une classe
pour quoi à ton besoin de faire 1 copie de classe ?
une autre question, qu'est ce qu'une variable membre statique ?
Merci d'avance
bonjour,
j'ai pas bien saisie la différence entre une classe et instance d'une classe
pour quoi à ton besoin de faire 1 copie de classe ?
une autre question, qu'est ce qu'une variable membre statique ?
Merci d'avance
Supposons que tu définisses une nouvelle classe, "Chaise"
Tu as 1 classe Chaise. Tu l'as définie, elle existe, elle est là. Ça ne changera pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 public class Chaise { }
Maintenant, pour t'asseoir toi et tes amis, tu as besoin de 4 chaises, tu vas donc créer 4 instances de la classe Chaise. Chaque instance est créée avec le mot-clé new.
Tu as 4 instances de la classe Chaise. Tu peux en créer d'autres, et tu peux les "oublier" quand tu n'en as plus besoin.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Chaise chaiseMarc = new Chaise(); Chaise chaisePatrick = new Chaise(); Chaise chaiseMichel = new Chaise(); Chaise chaiseDavid = new Chaise();
Je ne crois pas qu'il y ait besoin de faire une telle chose. Je ne sais pas ce que c'est qu'une "copie de classe".
La FAQ en parle un peu.
Normalement, une variable membre, c'est une variable dont chaque instance de la classe, chaque objet, a une version indépendante. Si dans ma classe Chaise j'ajoutais une variable Personne personneAssise, chaque chaise différente a sa propre personne assise dessus, et l'une peut changer de personne assise dessus, sans que les autres chaises du monde soient concernées.
Une variable statique, c'est différent : la variable statique ne s'applique non pas aux instances de la classe, mais à la classe elle-même. Il n'y en a qu'une. Les différentes instances de Chaise, et en fait le monde entier, voient la même. Si elle change, elle change pour tout le monde.
On pourrait ajouter à ma classe Chaise les variables membres suivantes :
À noter que c'est pareil pour les méthodes et les classes imbriquées. Par défaut elles ne sont pas statiques et donc s'appliquent à une instance précise. On a besoin d'une instance pour indiquer de laquelle on se sert.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public class Chaise { // Toutes les chaises servent à s'asseoir. // C'est lié au concept de chaise. Quand on parle d'une chaise, // on pense à un meuble qui sert à s'asseoir, sans penser à une chaise précise. public static final String UTILISATION = "S'assoir"; // Chaque chaise dans le monde a une personne différente assise dessus. public Personne personneAssise; }
Mais avec le mot-clé static on indique qu'elles s'appliquent indépendamment des instances de la classe. Il n'y a pas besoin d'instance pour indiquer qu'on s'en sert, il suffit de nommer la classe elle-même.
une classe est un code (suite d'instructions) definit la structure d'un objet.
un objet est une structure de données comme les enregistrements mais il contient des chomp pour stocker les donnes et des methodes pour gerer ces donnes.
objet= un execution d'une classe (un representation en memoire).
mais mois j'ais une question concernant les methodes
supposant qu'on a la classe suivante
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 class method { int a=4; int b=8; //la methode aa int aa() { return a+b;} }
et qu'on a deux instances(objet) M1 et M2 por cette classe
puisqu'une methode est un code est ce que pour chaque instance la methode aa est recopier comme un champ de l'objet ou une seul copie reste dans la classe, sinon comment differencier les donnes gerer par la methode aa (M1.a,M2.a...)
Code : Sélectionner tout - Visualiser dans une fenêtre à part metod M1 =new method();metod M2 =new method();
merci
Ça ne servirait à rien de recopier les méthodes -_-°.
Il suffit, quand on les appelle, de les appliquer à la bonne instance.
les méthodes, quelles qu'elles soient, font partie de la structure de classe. Une instance n'occupera en mémoire que les données et une référence vers sa classe. Sinon je vous laisse imaginer les consommation effrayant de mémoire qu'on ferait. Une classe contenant 2 int (4 octets donc) + 2ko de bytecode pour ses méthodes. On occuperai 200M de mémoire pour stocker 100.000 paires d'entiers? Alors qu'en pratique 2M suffisent amplement?
Autant dire que si c'était le cas, les languages objets n'auraient jamais eu de succès...
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager