JAVA classe abstraite

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. Modérateur
    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...
    1. 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
      1. Modérateur
        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()
        1. 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;
          }
          1. Modérateur
            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)
          2. aaa d'accord merci.
            merci pour vos reponse ça m'aide beaucoup
          3. Modérateur
            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.