Comment accéder à une donnée de la classe mère??? [Résolu] [Java] - Java - Programmation
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.
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)
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 :
|
ensuite, tu dois opuvoir accéder à ta variable affichage en fesant ca :
Code :
|
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]
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.
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 :
|
et dans un autre fichier
Code :
|
c'est le principe des attributs "protected"
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
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!!!
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 ?
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]
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.
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!!!
Marsh Posté le 23-05-2002 à 15:18:38
juste pour info : http://penserenjava.free.fr/pens/indexMain_9&2.htm
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 ....
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!
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!
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: |
j'avais jamais entendu parlé de ca ... c'est pas logique du tout !!!! je vais vérifier ca de suite !!!
Marsh Posté le 24-05-2002 à 10:05:44
je suis dégouté : ca marche ...
Citation : package testprotected; |
Citation : package testprotected; |
ca compile ( ) et à l'execution, ca affiche :
Code :
|
je suis sur le cul là !
Marsh Posté le 24-05-2002 à 10:31:29
benou a écrit a écrit : je suis dégouté : ca marche ... je suis sur le cul là ! |
Beaucoup de choses encore à apprendre tu as, mon jeune Padawan!! D
(Ouais, je suis allé voir l'épisode 2 hier soir, c'est une bouse!
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]