8
votes

Héritage multiple dans ActionScript 3

Héritage multiple dans ActionScript 3? Est-il possible? J'ai lu quelque part qu'il est possible dans AS3.

Si oui, alors comment? P>

Ceci est ma classe Doucument A.As P>

    package
    {
       public interface B
       {
          trace(' interface ');
          function hit():void;
       }
    }


5 commentaires

Vous ne pouvez étendre d'une seule classe, mais vous pouvez implémenter autant d'interfaces que vous le souhaitez. Qu'est-ce que vous essayez exactement de faire lorsque vous dites "héritage multiple"?


Voté pour une question non claire. La personne veut plusieurs instruments


@Wormss: cela s'appelle plusieurs héritages à l'aide de l'interface.


Son non héritage. La classe n'hérite pas .. Quelle fonctionnalité avez-vous héritée? Aucun .. Vous avez signalé qu'il y aurait des méthodes publiquement disponibles sur votre classe, c'est-à-dire. Aucune fonctionnalité derrière ces méthodes sauf si votre classe la fournit lui-même. Donc donc implémentation multiple pas héritage multiple


@wormss 100% correct, -1 pour ne pas demander clairement. Votre question est logique sans l'extrait de code. Mais l'extrait de rendre votre question n'a aucun sens.


4 Réponses :


73
votes

Héritage multiple n'est pas possible en tant que. mais avec des interfaces, vous pouvez imiter certaines des fonctionnalités de multiples héritage. MI a des défauts majeurs, notamment le problème du diamant: http://fr.wikipedia.org/wiki/diamond_problem C'est pourquoi de nombreuses langues ne prennent pas en charge MI, mais seulement une héritage unique. Utilisation des interfaces Il "apparaît" Vous appliquez MI, mais en réalité ce n'est pas le cas car les interfaces ne fournissent pas de mise en œuvre, mais seulement une promesse de fonctionnalité. XXX

P.S.: Au cas où vous vous demanderiez: Il n'y a pas de problème de diamant avec des interfaces car un implémentation des interfaces doit fournir exactement une implémentation de chaque membre défini dans les interfaces. Donc, même si les deux interfaces définiraient le même membre (avec une signature identique bien sûr), il n'y aura toujours qu'une seule implication.


3 commentaires

Techniquement, ce n'est pas une héritage multiple qui n'est pas possible comme. Cependant, regarder le commentaire @ Swati-Singh Made Avobe, on dirait qu'il veut une interface multiple et ce serait une solution correcte pour cela.


C'est pourquoi j'ai commencé ma réponse avec: "L'héritage multiple n'est pas possible en tant que." :)


+1 pour la modélisation Crazygansta Badass Preacher Jules à l'aide de OOP. Il ne vous frappera pas avec une grande vengeance et une colère furieuse.



0
votes

Vous pouvez faire le héritage multiple à l'aide de l'interface.

  1. Définissez la classe A, B et C. et définir l'interface pour la classe B et C respectivement IB et IC. Li>
  2. prolonge simplement la classe C à la classe A à l'aide de "EXTENDIER" mot-clé - Héritage direct de la classe LI>
  3. étend votre interface IC à l'interface IB. LI> ol>
    Just check code as per your requirement:
    
    package
    {
      import flash.display.MovieClip;
      public class A extends MovieClip implements B
      {
          public var value1:Number=10;
          public function A()
          {
              trace("A Class Constructor");
          }
          public function hit():void
          {
              trace(value1+' from hit');
          }
          public function print():void
          {
              trace("Print Method Called");
          }
      }
    } 
    
    package
    {
      public interface B extends D 
      {
          function hit():void;
      }
    }
    
    package
    {
      public class C implements D
      {
          pulic function C()
          {
              trace("C Class Constructor");
          }
          public function print():void
          {
              trace("Print Method Called");
          }
      }
    }
    
    package
    {
      public interface D
      {
          function print():void;
      }
    }
    


9 commentaires

Pouvez-vous mettre en œuvre cela dans mon exemple?


Bonjour Swati, je peux mettre en œuvre dans votre exemple. Mais pouvez-vous m'envoyer votre code d'exemple par courrier électronique car dans votre question, vous mentionnez uniquement l'interface B, la classe A mais non mentionnée l'interface C. Donc, j'ai besoin de code. mon adresse e-mail est mrugeeshapatel@gmail.com


Mrugeesh: j'ai écrit C par erreur. J'ai mis à jour mon code s'il vous plaît vérifier. Merci pour votre réponse.


Quelle autre classe que vous voulez étendre avec votre classe A?


Pour l'instant, je veux juste mettre en œuvre la classe B. Parce que B est une interface.


Dans le même emballage, vous ne pouvez pas créer l'interface et la classe avec le même nom, car les deux nécessitent le même nom de fichier. Vous devez modifier votre interface ou votre nom de classe pour le même package, sinon vous devez modifier votre package pour l'interface B et la classe B.


Veuillez vérifier la réponse modifiée avec votre code d'exemple, j'ai pris le nom de la classe C pour une autre classe et une autre interface D pour la classe C. Si vous avez un concer, vous pouvez me contacter par courrier électronique ou par cellule. Vous avez besoin de ma cellule non alors s'il vous plaît écrivez DIWN commentaire ou mail


Une erreur est survenue: 1044: Méthode d'interface Imprimer dans l'espace de noms D Non implémenté par classe A.


Laissez-nous Continuez cette discussion en chat



4
votes

Eh bien, il n'y a aucune possibilité de multiples héritage directement dans AS3, comme beaucoup d'autres langues de l'OOP.

OOP consiste à réutiliser le code et à la plupart d'entre nous souhaitons réutiliser le code écrit dans plusieurs classes. Donc, si vous voulez vraiment dire réutiliser le code (logique) au lieu des signatures que vous voudrez peut-être envisager composition ou délibulation et c'est probablement ce que vous avez lu quelque part, Comme vous l'avez dit.

Dans la composition Ce que vous faites est au lieu de hériter d'une base de base en sous-classe, vous aurez une instance de la base de la base dans une sous-classe et disposerez de toutes les méthodes xxx < / Pré>

Ce n'est pas un hack, mais en fait une mise en œuvre réelle et pratique adoptée par des développeurs expérimentés dans de nombreux modèles de conception.

espère que cela aide


0 commentaires

0
votes

Umm, gars!

Je peux vous montrer deux manières différentes de "imiter" héritage multiple:

  1. Utilisation de la fonctionnalité #Import: http://archive.darronschall.com/weblog/2006/10/multiple-inhéritance-in-aacscript-3html

  2. N'oubliez pas que ActionScript est ECMAScript. C'est toujours une langue basée sur le prototype: http://jolierouge.net/2010/01/AS3 -Multiple-inheriCemixins /

    Je sais ... pas "réel" mi, mais ils ressemblent à un canard, parlez comme un canard ...


0 commentaires