A voir également:
- [JAVA]Transtypage
- Jeux java itel ✓ - Forum Jeux vidéo
- Java runtime - Télécharger - Langages
- Java apk - Télécharger - Langages
- Scanf en java ✓ - Forum Java
- Java heap space ✓ - Forum Java
3 réponses
KX
Messages postés
16668
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2023
3 004
Modifié par KX le 8/03/2012 à 21:40
Modifié par KX le 8/03/2012 à 21:40
Les deux classes ne sont pas dérivées, seule ClientsVIP est dérivée de Clients, pas l'inverse.
Donc si monVecteur est une instance de Clients mais qu'il n'est pas instance de ClientsVIP alors nécessairement ça va planter, en particulier ici parce que le noMembre est impossible à déterminer puisqu'il n'existe pas...
Tu devrais faire un constructeur spécifique pour faire ce genre de manipulation :
Donc si monVecteur est une instance de Clients mais qu'il n'est pas instance de ClientsVIP alors nécessairement ça va planter, en particulier ici parce que le noMembre est impossible à déterminer puisqu'il n'existe pas...
Tu devrais faire un constructeur spécifique pour faire ce genre de manipulation :
ClientsVIP transtypeClients; if (monVecteur instanceof ClientsVIP) transtypeClients = (ClientsVIP) monVecteur; else transtypeClients = new ClientsVIP(monVecteur,noMembre);La confiance n'exclut pas le contrôle
Merci pour ta réponse, je suis vraiment debutant en JAVA :)
L'ennui, c'est que je n'arrive pas à atteindre noMembre (il est en private dans la classe ClientsVIP et son getter est non static)
L'ennui, c'est que je n'arrive pas à atteindre noMembre (il est en private dans la classe ClientsVIP et son getter est non static)
KX
Messages postés
16668
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2023
3 004
8 mars 2012 à 21:57
8 mars 2012 à 21:57
En l'occurrence ce n'est pas un getter qu'il te faut mais un setter... et évidemment qu'il n'est pas static sinon il ne servirait pas à grand chose... par contre si tu fais un nouveau constructeur de la classe ClientsVIP tu auras accès aux membres private de ClientsVIP donc ce n'est pas un problème a priori.
J'ai oublié de preciser que je travaillais sur une classe main nommée Interface dans laquelle a été déclarée le vecteur.
Mes faibles compétences ne me permettent malheureusement pas de créer un tel constructeur (monVecteur a été créé dans le for each, dans la main class)
Il faut vraiment que je boss ma POO :D
Merci beaucoup KX, déjà quelques erreurs que je ne referais plus :)
Mes faibles compétences ne me permettent malheureusement pas de créer un tel constructeur (monVecteur a été créé dans le for each, dans la main class)
Il faut vraiment que je boss ma POO :D
Merci beaucoup KX, déjà quelques erreurs que je ne referais plus :)
KX
Messages postés
16668
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2023
3 004
8 mars 2012 à 22:32
8 mars 2012 à 22:32
Qu'est-ce que tu as comme constructeur de ClientsVIP disponible ?
À défaut de pouvoir en créer un nouveau tu peux utiliser ceux qui existent déjà...
À défaut de pouvoir en créer un nouveau tu peux utiliser ceux qui existent déjà...
KX
Messages postés
16668
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2023
3 004
8 mars 2012 à 22:55
8 mars 2012 à 22:55
Donc si tu peux rajouter un constructeur à ClientsVIP tu peux faire :
Sinon, tu peux faire comme ceci mais c'est moins propre...
public ClientsVIP(Clients client, String noMembre) { super(client); // si le constructeur par copie de Clients existe // super(client.nom, client.prenom, client.adresse, client.solde); // sinon this.noMembre = noMembre; } transtypeClients = new ClientsVIP(monVecteur,noMembre); // comme plus haut
Sinon, tu peux faire comme ceci mais c'est moins propre...
transtypeClients = new ClientsVIP(monVecteur.getNom(), monVecteur.getPrenom(), monVecteur.getAdresse(), monVecteur.getSolde(), noMembre);
j'ai du remplacer
par
il me mettait que ces propriétés etaient private donc pas utilisables.
A part ça , j'ai pu faire un constructeur comme tu l'as indiqué.
impossible d'aller chercher noMembre
super(client.nom, client.prenom, client.adresse, client.solde)
par
super(client.getNom, client.getPrenom, client.getAdresse, client.getSolde)
il me mettait que ces propriétés etaient private donc pas utilisables.
A part ça , j'ai pu faire un constructeur comme tu l'as indiqué.
/*en revanche dans */ transtypeClients = new ClientsVIP(monVecteur,noMembre)
impossible d'aller chercher noMembre
KX
Messages postés
16668
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2023
3 004
9 mars 2012 à 07:47
9 mars 2012 à 07:47
C'est normal, il n'existe pas. En effet c'est l'information manquante qui fait que ton Clients n'est pas un ClientsVIP. Si tu veux le caster en ClientsVIP alors tu dois lui rajouter cette information.
Mais du coup tu peux mettre ce que tu veux, null, "", getNom, ou autre chose...
Remarque : c'est quand même très restrictif d'avoir mis nom, prenom etc... en private alors que typiquement c'est protected qu'il aurait fallu mettre.
Mais du coup tu peux mettre ce que tu veux, null, "", getNom, ou autre chose...
Remarque : c'est quand même très restrictif d'avoir mis nom, prenom etc... en private alors que typiquement c'est protected qu'il aurait fallu mettre.