javamen33
Messages postés46Date d'inscriptionjeudi 8 mars 2007StatutMembreDernière intervention 3 mai 2007
-
5 avril 2007 à 09:13
javamen33
Messages postés46Date d'inscriptionjeudi 8 mars 2007StatutMembreDernière intervention 3 mai 2007
-
6 avril 2007 à 11:52
Bonjour et slt a ts
j'ai un probleme j'ai crée un classe mére qui me permet de remplir une liste chainé qui s'appele drawables apres
j'ai cree un classe fille qui hérite de cette classe mére,le probleme c
'est quand je veux exploiter la liste drawables ds ma classe fille je
trouve qu'elle est vide..
est ce que c'est un probleme d'heritage?
vous avez une idée sur que est ce qu'il faut faire?
voici une partie du code de la classe mére
public class JCanvas extends JPanel{
public List drawables = new LinkedList();
public void paint(Graphics g) {
g.clearRect(0, 0, getWidth(), getHeight());//efface le dessin
for (Iterator iter = drawables.iterator(); iter.hasNext();) {
IDrawable d = (IDrawable) iter.next();
d.draw(g);
}
}
public void addDrawable(IDrawable d) {
drawables.add(d); //je remplie ma liste drawables
repaint();
}
et voici le code de la classe fille qui herite de la fonction mere:
public class gethirarchi1 extends JCanvas {
private LinkedList k;
public gethirarchi1() {
}
public void hirarchie1() {
int y;
k =(LinkedList) drawables;
y=k.size();
System.out.println(y);//ici l'ecran m'affiche '0' bien evidement
gmi19oj19
Messages postés545Date d'inscriptionlundi 10 mai 2004StatutMembreDernière intervention28 septembre 20112 5 avril 2007 à 11:25
Salut,
C'est bien ce que je disais..
Tu fais un add sur ton arbre...
Ensuite, tu crées un nouvel objet de type "verif"
Cet objet NE PARTAGE PAS sa LinkedList avec ton objet de type arbre
Chaque objet possède sa propre LinkedList
Pour faire court, tu as mal assimilé la notion d'héritage..Et essaie de mettre la première lette du nom de ta classe en majuscules... histoire de respecter certaines conventions de codage
gmi19oj19
Messages postés545Date d'inscriptionlundi 10 mai 2004StatutMembreDernière intervention28 septembre 20112 6 avril 2007 à 10:25
Salut,
C'st parce qu'en déclarant ta variable statique, elle devient variable de classe, càd partagée par toutes les instances et également accessible partout.
lafolle24320
Messages postés406Date d'inscriptionsamedi 26 mars 2005StatutMembreDernière intervention29 juin 20097 5 avril 2007 à 09:18
commence par mettre un sujet clair que les gens qui ne savent pas répondre évite de perdre leur temps à savoir pourquoi tu veux de l'aide. Ici tout le monde demande de l'aide!!!
gmi19oj19
Messages postés545Date d'inscriptionlundi 10 mai 2004StatutMembreDernière intervention28 septembre 20112 5 avril 2007 à 10:31
Salut,
A aucun moment tu n'instancies un objet de ta classe fille, comment peut-il y avoir un problème ?
De plus, ta LinkedList est une variable d'instance, c'est à dire que chaque fois que tu fais un new JCanvas(), il possède sa propre LinkedList d'éléments dessinables...
javamen33
Messages postés46Date d'inscriptionjeudi 8 mars 2007StatutMembreDernière intervention 3 mai 2007 5 avril 2007 à 10:32
Slt a ts.
j'ai crée un petit exemple sur l'heritage et j'ai tjrs le meme probleme
c-a-d dans la classe fille je trouve ma liste est vide alors
qu'elle n'est pas vide .
voivi le code de la classe main
public class Main {
public Main() {
}
public static void main(String[] args) {
arbre ar = new arbre();
}
}
voivi le code de la classe arbre
public class arbre extends javax.swing.JFrame {
public List drawable =new LinkedList();
public Rectangle R=new Rectangle();
/** Creates new form arbre */
public arbre() {
initComponents();
pack();
setVisible(true);
}
private void //Bouton permettant afficher le nbre
//d'element dela liste
jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
verif ver=new verif();
ver.affiche();
}
private void //Bouton permettant de remplir la liste jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
R.setBounds(20,20,20,20);
drawable.add(R);
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
// End of variables declaration
}
voivi le code de la classe vérif qui hérite de la classe arbre
gmi19oj19
Messages postés545Date d'inscriptionlundi 10 mai 2004StatutMembreDernière intervention28 septembre 20112 6 avril 2007 à 09:41
Salut,
Non non, il faut que ce soit sur la classe mère, puisque c'est sur une instance de cette classe que tu fais tes add(). De toutes façons, la classe fille en héritera. Et si tu veux absolument utilisé une autre classe pour connaitre le nombre d'éléments de ta liste, il faut que celle ci ait un pointeur vers ton objet courant (lui passer en paramètre du constructeur quoi)... Mais honnêtement, une seule classe suffit pour ça et c'est pas le meilleur moyen d'apprendre à se servir de l'héritage...
l'utilisation de static
est fortement déconseillé...
pour illustrer le
problème lié à un champ ou une méthode
static voici une petite classe qui incrémente et affiche une varible static (teste le tu verras) :
public class Test {
//création de la variable static
private static int i = 10;
//recupération de i
private int getI(){
return i;
}
//incrémentation de i
private void increment(){
++i;
}
public static void main(String[] args) {
//création des instances
Test t1 = new Test();
Test t2 = new Test();
//affichage de i
System.out.println("t1.getI() = " + t1.getI() + ", t2.getI()" + t2.getI());
//on incrément le i de t1 (qui est le meme pour t2 vu que i est static)
t1.increment();
//affichage de i
System.out.println("t1.getI() = " + t1.getI() + ", t2.getI()" + t2.getI());
//tu remarques que i de t2 il a lui aussi été incrémenté
}
}
En conclusion tu peux utiliser du static dans un code mais faut vraiment savoir ce que tu fais sinon tu risque d'avoir des effets non désirés.
------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."