Définition de "instance" an JAVA
Résolu/Fermé
Pulsar360
Messages postés
113
Date d'inscription
lundi 12 novembre 2012
Statut
Membre
Dernière intervention
29 août 2018
-
5 janv. 2013 à 14:36
primel56 Messages postés 15 Date d'inscription samedi 14 janvier 2012 Statut Membre Dernière intervention 10 décembre 2013 - 10 déc. 2013 à 18:45
primel56 Messages postés 15 Date d'inscription samedi 14 janvier 2012 Statut Membre Dernière intervention 10 décembre 2013 - 10 déc. 2013 à 18:45
A voir également:
- Instance java definition
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Java décompiler - Télécharger - Langages
- Java runtime - Télécharger - Langages
4 réponses
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
5 janv. 2013 à 15:39
5 janv. 2013 à 15:39
L'instance d'une classe c'est un objet.
La classe est un peu comme un "moule à gâteaux", tu peux t'en servir plusieurs fois avec des paramètres différents (différentes pâtes à gâteaux), pour obtenir plusieurs gâteaux différents issus du même moule.
En Java les objets les plus courants que l'on utilise ce sont les String.
String s1 = new String("bonjour");
String s2 = new String("ça va ?");
Ici on a créé deux objets différents de la même classe String. Ces objets sont manipulés par deux variables (s1 et s2) sur lesquels on peut appliquer des méthodes dont le comportement dépendra de leur état (de leur valeur).
En revanche l'héritage copie une classe pour l'enrichir, c'est à dire qu'on rajoute des méthodes supplémentaires pour manipuler des objets de plus en plus particuliers.
Si tu as trois fenêtres de la même classe, elles auront toutes un comportement identiques (avec des variations sur leur paramètres). En revanche si tu considères une fenêtre d'une classe héritée, celle-ci pourra utiliser toutes les méthodes d'une fenêtre normale, mais aura en plus des méthodes qui lui est propre ce qui permettra d'avoir un comportement spécifique à sa classe.
La classe est un peu comme un "moule à gâteaux", tu peux t'en servir plusieurs fois avec des paramètres différents (différentes pâtes à gâteaux), pour obtenir plusieurs gâteaux différents issus du même moule.
En Java les objets les plus courants que l'on utilise ce sont les String.
String s1 = new String("bonjour");
String s2 = new String("ça va ?");
Ici on a créé deux objets différents de la même classe String. Ces objets sont manipulés par deux variables (s1 et s2) sur lesquels on peut appliquer des méthodes dont le comportement dépendra de leur état (de leur valeur).
En revanche l'héritage copie une classe pour l'enrichir, c'est à dire qu'on rajoute des méthodes supplémentaires pour manipuler des objets de plus en plus particuliers.
Si tu as trois fenêtres de la même classe, elles auront toutes un comportement identiques (avec des variations sur leur paramètres). En revanche si tu considères une fenêtre d'une classe héritée, celle-ci pourra utiliser toutes les méthodes d'une fenêtre normale, mais aura en plus des méthodes qui lui est propre ce qui permettra d'avoir un comportement spécifique à sa classe.
Pulsar360
Messages postés
113
Date d'inscription
lundi 12 novembre 2012
Statut
Membre
Dernière intervention
29 août 2018
10
Modifié par Pulsar360 le 5/01/2013 à 16:25
Modifié par Pulsar360 le 5/01/2013 à 16:25
Merci beaucoup pour ton aide =)
Donc
String s1 = new String("bonjour");
String s2 = new String("ça va ?");
... sur lesquels on peut appliquer des méthodes dont le comportement dépendra de leur état (de leur valeur).
...
En revanche l'héritage copie une classe pour l'enrichir...
La je ne comprend pas, car sur une classe hérité on peut tous à fait appliquer de nouvelle méthode sur les objets de la classe fille, tous comme une instance de la dite même classe nous pourrions modifier ou appliquer de nouvelle méthode, non?
De plus, est ce que c'est deux annotations sont identiques?
String s1 = new String("bonjour");
String s2 = new String("ça va ?");
et
String s1 = "bonjour" , s2 = "ça va ?";
Donc
String s1 = new String("bonjour");
String s2 = new String("ça va ?");
... sur lesquels on peut appliquer des méthodes dont le comportement dépendra de leur état (de leur valeur).
...
En revanche l'héritage copie une classe pour l'enrichir...
La je ne comprend pas, car sur une classe hérité on peut tous à fait appliquer de nouvelle méthode sur les objets de la classe fille, tous comme une instance de la dite même classe nous pourrions modifier ou appliquer de nouvelle méthode, non?
De plus, est ce que c'est deux annotations sont identiques?
String s1 = new String("bonjour");
String s2 = new String("ça va ?");
et
String s1 = "bonjour" , s2 = "ça va ?";
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
Modifié par KX le 5/01/2013 à 17:10
Modifié par KX le 5/01/2013 à 17:10
"tous comme une instance de la dite même classe nous pourrions modifier ou appliquer de nouvelle méthode, non?"
Moi je considère une classe comme étant terminée, compilée, et plus jamais modifiée.
Donc une classe qui a 12 méthodes, en aura toujours 12, ce seront toujours les mêmes, et si tu veux en changer tu dois hériter. Essayes de modifier la classe String pour voir ^^
De plus, est ce que c'est deux annotations sont identiques?
Attention, il y a un piège :(
Lorsque tu mets un String directement entre guillemets, il y a un objet qui est créé (quelque part, on ne sait pas où, et tu n'y a pas accès), et qui est réutilisé à chaque fois que ce même String entre guillemets est réutilisé.
Donc s1 et s2 sont deux références au même objet, tu peux par exemple faire : s1==s2, ce qui renverra true, car s1 et s2 sont identiques.
Tu pourras même faire directement s1=="bonjour", ce sera équivalent à s1==sys_bonjour, et renverra true également.
En revanche, si tu fais :
Tu peux par exemple tester tes deux codes comme ceci ;
Remarque : de manière générale il ne faut pas utiliser == pour comparer deux String, parce que ça ne renverra true que s'ils s'agit strictement du même objet, il faut utiliser equals pour comparer les valeurs de deux objets.
Autre remarque : j'ai appelé ma variable système "sys_bonjour", mais en réalité elle n'a pas ce nom là, d'ailleurs elle n'a très certainement aucun nom parce que ce n'est pas vraiment une variable, une fois la compilation terminée il reste juste un objet (référencé par s1 et s2).
Moi je considère une classe comme étant terminée, compilée, et plus jamais modifiée.
Donc une classe qui a 12 méthodes, en aura toujours 12, ce seront toujours les mêmes, et si tu veux en changer tu dois hériter. Essayes de modifier la classe String pour voir ^^
De plus, est ce que c'est deux annotations sont identiques?
Attention, il y a un piège :(
Lorsque tu mets un String directement entre guillemets, il y a un objet qui est créé (quelque part, on ne sait pas où, et tu n'y a pas accès), et qui est réutilisé à chaque fois que ce même String entre guillemets est réutilisé.
String s1 = "bonjour", s2 = "bonjour";est équivalent à :
// objet système, caché quelque part String sys_bonjour = new String(new char[] {'b','o','n','j','o','u',''r'}); String s1= sys_bonjour, s2 = sys_bonjour;
Donc s1 et s2 sont deux références au même objet, tu peux par exemple faire : s1==s2, ce qui renverra true, car s1 et s2 sont identiques.
Tu pourras même faire directement s1=="bonjour", ce sera équivalent à s1==sys_bonjour, et renverra true également.
En revanche, si tu fais :
String s3 = new String("bonjour");Ce sera équivalent à :
String s3 = new String(sys_bonjour);Mais dans ce cas, l'objet s3 est une copie de sys_bonjour, ils ont la même valeur, mais ce n'est pas le même objet, donc s1==s3 renverra false, par contre bien sûr s1.equals(s3) renverra true.
Tu peux par exemple tester tes deux codes comme ceci ;
String s1 = new String("bonjour"); String s2 = new String("ça va ?"); System.out.println(s1=="bonjour"); // false System.out.println(s2=="ça va ?"); // false String s1 = "bonjour" , s2 = "ça va ?"; System.out.println(s1=="bonjour"); // true System.out.println(s2=="ça va ?"); // true
Remarque : de manière générale il ne faut pas utiliser == pour comparer deux String, parce que ça ne renverra true que s'ils s'agit strictement du même objet, il faut utiliser equals pour comparer les valeurs de deux objets.
Autre remarque : j'ai appelé ma variable système "sys_bonjour", mais en réalité elle n'a pas ce nom là, d'ailleurs elle n'a très certainement aucun nom parce que ce n'est pas vraiment une variable, une fois la compilation terminée il reste juste un objet (référencé par s1 et s2).
arth
Messages postés
9374
Date d'inscription
mardi 27 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2016
1 292
5 janv. 2013 à 17:21
5 janv. 2013 à 17:21
"System.out.println(s1=="bonjour"); // false "
Mouais mouais mouais il vaudrait mieux pas utiliser .equals() à la place? :-D
Mouais mouais mouais il vaudrait mieux pas utiliser .equals() à la place? :-D
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
5 janv. 2013 à 17:25
5 janv. 2013 à 17:25
Si on mets equals on ne voit pas la différence entre ses deux codes, on ne voit pas où sont les objets qui sont identiques, et ceux qui sont de nouvelles instances de ces objets...
arth
Messages postés
9374
Date d'inscription
mardi 27 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2016
1 292
Modifié par arth le 5/01/2013 à 17:28
Modifié par arth le 5/01/2013 à 17:28
Aheum pardon tu parlais sans doute niveau emplacement c'est ça?
Edit : Vil sacripant, tu as rajouté le .equals() après ;-)
Edit : Vil sacripant, tu as rajouté le .equals() après ;-)
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
5 janv. 2013 à 17:29
5 janv. 2013 à 17:29
Je parlais surtout de comment sont instanciés les objets String qui sont directement écrits avec leur valeur entre guillemets :
String s1 = "bonjour";Tous les String instanciés avec "bonjour" dans le même code sont identiques (c'est le même objet), contrairement aux objets instanciés avec "new String()" qui sont des objets différents (instanciés par copie)
binary-file
Messages postés
521
Date d'inscription
jeudi 2 décembre 2010
Statut
Membre
Dernière intervention
12 mai 2013
32
5 janv. 2013 à 17:03
5 janv. 2013 à 17:03
Bon pour faire simple, tu a une classe que tu et dans un fichier *.class puis dans le main (ou ailleurs) tu l'instancie, c'est a dire que tu va utiliser cette classe comme variable en quelque sorte (je suis un grands débutant) et tu pourra utilisé les méthodes de celle ci.
exemple tu a une classe main et une classe test qui a une methode tuto
test test = new test(); // le deuxieme tst est le nom de l'instance, tu pourra par exemple l'appeller chose donc tu pourra faire ça :
test test = new test();
test.tuto(param);
ou
test test_autre_nom = new test(param);
test_autre_nom.tuto(param);
c'est moche mais c'est ce que moi j'ai compris x)
Cordialement
exemple tu a une classe main et une classe test qui a une methode tuto
test test = new test(); // le deuxieme tst est le nom de l'instance, tu pourra par exemple l'appeller chose donc tu pourra faire ça :
test test = new test();
test.tuto(param);
ou
test test_autre_nom = new test(param);
test_autre_nom.tuto(param);
c'est moche mais c'est ce que moi j'ai compris x)
Cordialement
primel56
Messages postés
15
Date d'inscription
samedi 14 janvier 2012
Statut
Membre
Dernière intervention
10 décembre 2013
6
10 déc. 2013 à 18:45
10 déc. 2013 à 18:45
@binary-file : je suis un debutant moi aussi, mais j'ai compris les choses differements.
nomDeLaSuperClass nomDeLaVariable = new nomDeLaSuperClass();
en clair
nomDeL'instance nomDeLaVariable = new nomDeLaSuperClass();
_ton instance c'est comme un "type" pour ta variable que tu as deja créer dans ta super class
_le nom de ta variable
_et ici tu appel ta super class
nomDeLaSuperClass nomDeLaVariable = new nomDeLaSuperClass();
en clair
nomDeL'instance nomDeLaVariable = new nomDeLaSuperClass();
_ton instance c'est comme un "type" pour ta variable que tu as deja créer dans ta super class
_le nom de ta variable
_et ici tu appel ta super class