JAVA classe abstraite

lol88 -  
KX Messages postés 19031 Statut Modérateur -
Bonjour,

j'ai un grand probleme, je travaille actuellement avec la framework snmp6; j'ai constater qu'il y a une declaration de classe celle ci : public abstract class Pdu extends Observable
mais elle ne contient aucune methode abstraite, j'ai rencontré ce probleme car j'ai trouvré des objets de type Pdu mais l'orsque je fait appele à l'une de ces methodes c'est la methode de la classe fille qui s'execute !!!

j'ai pas compris cette implementation

4 réponses

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    Une classe abstraite n'est pas obligée de contenir des méthodes abstraites...
    Cependant, regarde si Observable dont elle hérite n'aurait pas elle des méthodes abstraites.

    Remarque : il est tout à fait normal que ce soit la méthode de la classe fille qui s'exécute puisqu'elle est plus spécifique, sinon ça ne servirait à rien de surcharger les méthodes !

    Si tu veux une aide concrète, donne nous un lien vers la Javadoc de ta bibliothèque, et le code qui pose problème...
    0
  2. lol88
     
    merci pour votre reponse voici le lien http://www.uclp.ca/api/uclp1.5/es/i2cat/uclp/scs/protocols/snmp/westhawk/stack/Pdu.html

    donc si elle n'implemente pas de methode abstraite c'est pas une classe abstraite !!
    sinon a quoi ç a sert le mot clé abstract et comment on n'a pu l'instancier, car je voudrais une instance de la classe fille pour pouvoir acceder à ses methode mais je me retrouve avec la classe mere...

    Rq: Observable c'est le design pattern
    0
  3. KX Messages postés 19031 Statut Modérateur 3 020
     
    Comme je l'ai dit, une classe abstraite n'a pas forcément de méthode abstraite.
    Cela peut arriver lorsque l'on veut interdire l'instanciation de la classe.

    Cependant ici, il y a bien des méthodes abstraites :
    protected abstract void new_value(int n, varbind res)
    protected abstract void tell_them()
    0
  4. lol88
     
    alors comment on a pu l'instancier ?
    voici un bout de code :

    private Pdu pdu;
    public DecodedPduEvent(Object source, Pdu p, int prt)
    {
    super(source);
    pdu = p;
    hostPort = prt;
    }
    0
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      L'instanciation c'est faire Pdu p = new Pdu(con); ce qui n'est pas possible.
      Mais ça ne t'empêche pas d'utiliser la classe Pdu quand même :
      Pdu p = new DiscoveryPdu(cntxt);
      DecodedPduEvent(source,p,prt)
      0
    2. lol88
       
      aaa d'accord merci.
      merci pour vos reponse ça m'aide beaucoup
      0
    3. KX Messages postés 19031 Statut Modérateur 3 020
       
      Remarque : dans le code j'ai utilisé DiscoveryPdu mais c'est juste un exemple, tu peux utiliser n'importe quelle sous-classe non-abstraite de Pdu, celles de la librairie ou la tienne selon tes besoins.
      0