Overridable methode call in constructor ?

Résolu/Fermé
westerndigit Messages postés 134 Date d'inscription mercredi 16 février 2011 Statut Membre Dernière intervention 18 avril 2012 - Modifié par westerndigit le 24/01/2012 à 08:55
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 24 janv. 2012 à 12:32
Bonjour,

Que faut-il faire quand on a l'erreur petit ampoule jaune avec attention !

Java
"Overridable methode call in constructor"

4 possibilités

Make the class infos final
Make the method setPrenom final
Make the method setPrenom static
Make the method setPrenom private

Merci pour la réponse,

logiciel Netbeans
A voir également:

3 réponses

Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
24 janv. 2012 à 10:05
Salut.
Je pense qu'un petit morceau de code serait le bien venu pour nous aider à comprendre.
Si je comprend bien, tu appel une méthode surchargeable dans le constructeur d'une classe. Le compilateur t'alerte en te faisant remarqué que dans le cas d'une classe dérivé, il y a un risque qu'une méthode dérivée soit appelée.
Ensuite, il te donne quelques propositions pour résoudre le problème.
Je connais mal java, et en particulier l'instruction "final" (pour moi c'est l'équivalent de const en C++, mais il y a peut être des subtilités).
Si tu rends ta méthode statique, elle sera propre à la classe et non à l'objet (d'ailleurs, je ne vois pas en quoi ça résout le problème) si tu la mets private, elle ne pourra être appelé qu'au sein des méthodes de ta classe (du coup est-ce que ce seront les méthodes du dernier enfant qui seront utilisées ?) ce qui serait étrange pour un "setter".
0
westerndigit Messages postés 134 Date d'inscription mercredi 16 février 2011 Statut Membre Dernière intervention 18 avril 2012
24 janv. 2012 à 11:38
je suis en réunion dès que possible je mets un bout de code
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
24 janv. 2012 à 11:47
Après vérification, final empêche en fait la surcharge d'une méthode. Je pense que c'est la meilleure façon de résoudre le problème (enfin, sans avoir vu le bout de code).
0
westerndigit Messages postés 134 Date d'inscription mercredi 16 février 2011 Statut Membre Dernière intervention 18 avril 2012
24 janv. 2012 à 12:02
voici le bout de code :

package modelecarnet_1;

import javax.swing.ImageIcon;

/**
*
* @author AnneT
*/
public class Infos extends javax.swing.JPanel {
//prenom, nom, url, numTel, numPort, courriel, rue, ville
/** Creates new form Infos */
public Infos(String [] nl) {
initComponents();
setVisible(true);
setPrenom( nl[0]);
setNom( nl[1]);
setPhoto( nl[2]);
setNumTel( nl[3]);
setNumPort( nl[4]);
setCourriel( nl[5]);
setRue( nl[6]);
setVille( nl[7]);
}

public void setNom(String tmp){
nomLbl.setText(tmp);
}
public void setPrenom(String tmp){
prenomLbl.setText(tmp);
}
public void setPhoto(String tmp){
ImageIcon iconPhoto = new ImageIcon(tmp);
photoLbl.setIcon(iconPhoto);
}
public void setNumTel(String tmp){
numDomicileLbl.setText(tmp);
}
public void setNumPort(String tmp){
numPortableLbl.setText(tmp);
}
public void setCourriel(String tmp){
adresseCourrielLbl.setText(tmp);
}
public void setRue(String tmp){
rueLbl.setText(tmp);
}
public void setVille(String tmp){
villeLbl.setText(tmp);
}
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
24 janv. 2012 à 12:19
OK, comme ça c'est un peu plus clair.
mettre ta méthode en static ne fonctionnera que si prenomLbl est statique (ce qui m'étonnerai)
private (=non surchargeable, donc un peu similaire à final) fera que tu n'auras plus acces à ta fonction en dehors de la classe.

En fait, la meilleur méthode dépend de ce que tu comptes faire de la classe Infos.
Si tu ne comptes pas la dérivée, met la en final. Si tu compte la dérivée, met toutes tes méthode en final, je ne pense pas que tes setters aient besoin d'être surchargé.
Oui, tu annonce un problème avec setPrenom, mais je pense que tu devrais avoir le même avec toutes les autres méthodes setVille, setRue etc.
0
westerndigit Messages postés 134 Date d'inscription mercredi 16 février 2011 Statut Membre Dernière intervention 18 avril 2012
24 janv. 2012 à 12:29
Que veut tu dire par dérivée ? oui tous les set ont une petites ampoules attention.
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
24 janv. 2012 à 12:32
hérité, si tu préfère à la place de dérivée.
Si tu veux q'une classe en hérite, tu ne peux pas mettre final. Dans le cas où aucune classe n'héritera d'Infos, tu peux mettre final.
0