[Java] Comment accéder à une donnée de la classe mère??? [Résolu]

Comment accéder à une donnée de la classe mère??? [Résolu] [Java] - Java - Programmation

Marsh Posté le 23-05-2002 à 13:39:59    

import java.util.*;
Comment faire pour initialiser uen donnée membre d'une classe abstraire lors de l'instanciation de celle ci???
 
Par exemple j'ai dans un premier temps cette classe :
 
 
import javax.swing.*;
 
public abstract class GestionCommande  {
     
    protected JComponent affichage;
     
    public abstract String verifier();
     
    public JComponent getAffichage() {
        return affichage;
    }
     
}

 
 
et par ailleurs, je veux en creer une instance, pour cela je fais :  
 
GestionCommande inter =  (new GestionCommande() {
    public String verifier() {return "coucou";}
});

 
 
mais si je vais acceder à la donnée affichage il faut faire comment????
car si je fais : affichage = new JLabel(); il compile pas car ne connait pas affichage
et si je fais : private JComponent affichage = new JLabel(); il me creer une nouvelle donnée dans la classe fille crée. (enfin je crois car je suis pas sur d'avoir tout capter à ce niveau)
 
C'est pas encore un coup de super() ??? Mais comme j'ai toujorus du mal avec je me prends la tete sans resoudre mon problème.
 
Merci.

 

[jfdsdjhfuetppo]--Message édité par Zizou le 23-05-2002 à 14:42:59--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 23-05-2002 à 13:39:59   

Reply

Marsh Posté le 23-05-2002 à 13:51:08    

Instancier une classe abstraite !!!!
Ca me parait louche

Reply

Marsh Posté le 23-05-2002 à 14:11:44    

RiffRaff a écrit a écrit :

Instancier une classe abstraite !!!!
Ca me parait louche  




il l'instancit pas : il créé une classe interne anonyme héritant de sa classe abstraite.


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 23-05-2002 à 14:12:31    

sinon, j'ai pas compris à quel endroit tu voulais récupéré ta variable affichage (qui n'a pas été instancié, soit dit en passant)


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 23-05-2002 à 14:24:08    

j'ai peut être compris ce que tu voulais faire ... tu peux faire ca avec un "bloc" qui sert de constructeur aux classes internes anonymes.

Code :
  1. GestionCommande inter =  new GestionCommande() {
  2.    {
  3.       affichage = new JLabel("truc" );
  4.    }
  5.    public String verifier() {return "coucou";}
  6. };


ensuite, tu dois opuvoir accéder à ta variable affichage en fesant ca :
 

Code :
  1. inter.getAffichage();


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 23-05-2002 à 14:28:41    

Comme ta var n'est pas publique,
il faut que tu fasse une nouvelle méthode  
 
public void setAffichage(JComponent MaNouvelleVal) {  
   affichage=ManouvelleVal    
   }  
 
et dans ton autre classe tu appelles setAffichage
 
enfin c'est le principe!
 
C'est normale que tu y accede pas directement vu qu'elle n'est pas  publique

 

[jfdsdjhfuetppo]--Message édité par Choubidoudou le 23-05-2002 à 14:30:31--[/jfdsdjhfuetppo]


---------------
Just BOUH it !
Reply

Marsh Posté le 23-05-2002 à 14:30:24    

benou a écrit a écrit :

sinon, j'ai pas compris à quel endroit tu voulais récupéré ta variable affichage (qui n'a pas été instancié, soit dit en passant)  




 
dans la création de mon inner classe : en fait je veux pas la récuperer mais l'instancier justement
 
Mias le problème vient pas du fait que c'est une classe interne mais du fait que je sais pas comment on accéde dans une classe fille à une variable d'une classe mère qd celle ci est déclarée en protected.
Je voudrais y acceder directement, et non pas passer par un constructeur ou un mutateur.

Reply

Marsh Posté le 23-05-2002 à 14:33:02    

ben si elle est protected, tu y accèdes normalement ... en mettant son nom.
 
ex:  

Code :
  1. public class A {
  2.    protected String s;
  3. }


et dans un autre fichier

Code :
  1. public class B extends A {
  2.    public B() {
  3.       s = "coucou";
  4.    }
  5. }


c'est le principe des attributs "protected"


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 23-05-2002 à 14:35:31    

ok, ca y est j'ai capté : c'est bien ce que choubidoudou disait. Tu veux accéder depuis l'extérieur à ta variable.
 
Si elle est déclarée protected, tu ne peux y accéder que dans la classe et les sous-classes.
Si tu veux y accéder depuis l'extérieur, tu dois la rendre publique, mais c'est pas propre.
 
Pour faire propre, il faut que tu fasse une méthode set comme choibi te le disait


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 23-05-2002 à 14:36:14    

Choubidoudou a écrit a écrit :

Comme ta var n'est pas publique,
il faut que tu fasse une nouvelle méthode  
 
public void setAffichage(JComponent MaNouvelleVal) {  
   affichage=ManouvelleVal    
   }  
 
et dans ton autre classe tu appelles setAffichage
 
enfin c'est le principe!
 
C'est normale que tu y accede pas directement vu qu'elle n'est pas  publique  
 
 




 
ben non elle est protected donc je peux y acceder normalement!!!

Reply

Marsh Posté le 23-05-2002 à 14:36:14   

Reply

Marsh Posté le 23-05-2002 à 14:36:36    

Zizou a écrit a écrit :

 
Je voudrais y acceder directement



la question est : depuis où tu veux y accéder ?


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 23-05-2002 à 14:38:43    

Oui désolée, j'avais cru voir private dans un premier temps...mais il me semble qu'il faut faire ca quand meme...comme Benou le dit

 

[jfdsdjhfuetppo]--Message édité par Choubidoudou le 23-05-2002 à 14:41:08--[/jfdsdjhfuetppo]


---------------
Just BOUH it !
Reply

Marsh Posté le 23-05-2002 à 14:39:12    

Zizou a écrit a écrit :

 
 
ben non elle est protected donc je peux y acceder normalement!!!  




 
 
Uniquement depuis les classes du même package.

Reply

Marsh Posté le 23-05-2002 à 14:41:50    

benou a écrit a écrit :

 
la question est : depuis où tu veux y accéder ?  




 
C'est bon je connaissais pas comment marchait les constructeurs pour les classes internes anonymes, donc ta réponse avec le bloc me convient parfaitement, et je t'en remercie!!!
 
Merci beaucoup!!!

Reply

Marsh Posté le 23-05-2002 à 15:18:38    

Reply

Marsh Posté le 23-05-2002 à 15:19:07    

gfive a écrit a écrit :

 
Uniquement depuis les classes du même package.  




bha non, c'est quand tu mets pas de modifier ca ....


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 23-05-2002 à 15:39:00    

benou a écrit a écrit :

juste pour info : http://penserenjava.free.fr/pens/indexMain_9&2.htm  




Sympa le lien!
Merci!


---------------
Just BOUH it !
Reply

Marsh Posté le 24-05-2002 à 08:57:36    

benou a écrit a écrit :

 
bha non, c'est quand tu mets pas de modifier ca ....  




 
Dans les specs du language :  
 
6.6.1 Determining Accessibility
 
    * A package is always accessible.
    * If a class or interface type is declared public, then it may be accessed by any code, provided that the compilation unit (§7.3) in which it is declared is observable. If a top level class or interface type is not declared public, then it may be accessed only from within the package in which it is declared.
    * An array type is accessible if and only if its element type is accessible.
    * A member (class, interface, field, or method) of a reference (class, interface, or array) type or a constructor of a class type is accessible only if the type is accessible and the member or constructor is declared to permit access:
          o If the member or constructor is declared public, then access is permitted. All members of interfaces are implicitly public.
          o Otherwise, if the member or constructor is declared protected, then access is permitted only when one of the following is true:
                      # Access to the member or constructor occurs from within the package containing the class in which the protected member or constructor is declared.
                # Access is correct as described in §6.6.2.
          o Otherwise, if the member or constructor is declared private, then access is permitted if and only if it occurs within the body of the top level class (§7.6) that encloses the declaration of the member.
    o Otherwise, we say there is default access, which is permitted only when the access occurs from within the package in which the type is declared.
 
 
6.6.2 Details on protected Access
A protected member or constructor of an object may be accessed from outside the package in which it is declared only by code that is responsible for the implementation of that object.
 
 
 
Enfin, c'est un joyeux bordel, quoi! :D

Reply

Marsh Posté le 24-05-2002 à 09:59:32    

Citation :

if the member or constructor is declared protected, then access is permitted only when one of the following is true:  
  # Access to the member or constructor occurs from within the package containing the class in which the protected member or constructor is declared.


 
:ouch: :??:
 
j'avais jamais entendu parlé de ca ... c'est pas logique du tout !!!! je vais vérifier ca de suite !!!


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 24-05-2002 à 10:05:44    

je suis dégouté : ca marche ...
:eek2:

Citation :

package testprotected;
 
public class A {
   protected String s;
   public A() { s = "initialisé dans A"; }
   public String toString() {return "s = " + s;}
}


 

Citation :

package testprotected;
 
public class B {
   public static void main (String[] args) {
      A a = new A();
      a.s = "modifié dans B";
      System.out.println(a);
   }
}


 
ca compile ( :??: ) et à l'execution, ca affiche :

Code :
  1. s = modifié dans B


 
je suis sur le cul là !


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 24-05-2002 à 10:31:29    

benou a écrit a écrit :

je suis dégouté : ca marche ...
:eek2:
 
je suis sur le cul là !  




 
Beaucoup de choses encore à apprendre tu as, mon jeune Padawan!! :D:D
 
(Ouais, je suis allé voir l'épisode 2 hier soir, c'est une bouse! :D

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed