ActionScript 3中的多重继承

Swa*_*ngh 8 apache-flex flash actionscript-3

ActionScript 3中的多重继承?可能吗?我已经读过某个地方,它可能在as3中.

如果是,那怎么样?

这是我的Doucument Class A.as

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');   
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

另一个是接口 B.as

    package
    {
       public interface B
       {
          trace(' interface ');
          function hit():void;
       }
    }
Run Code Online (Sandbox Code Playgroud)

提前致谢.

Cre*_*ers 73

AS中无法进行多重继承.但是通过接口,您可以模仿多重继承的一些功能.MI存在重大缺陷,最明显的是钻石问题:http: //en.wikipedia.org/wiki/Diamond_problem 这就是为什么许多语言不支持MI,而只支持单一继承.使用接口它"看起来"你应用MI,但实际情况并非如此,因为接口不提供实现,而只提供功能的承诺.

interface BadAss{
    function doSomethingBadAss():void;
}

interface Preacher{
    function quoteBible():void;
}

class CrazyGangsta implements BadAss, Preacher{
    function quoteBible():void{
        trace( "The path of the righteous man is beset on all sides by the inequities of the selfish and the tyranny of evil men." );
    }
    function doSomethingBadAss():void{
        //do something badass
    }
}

var julesWinnfield : CrazyGangsta = new CrazyGangsta();
julesWinnfield.doSomethingBadAss();
julesWinnfield.quoteBible();

//however, it mimics MI, since you can do:

var mofo : BadAss = julesWinnfield;
mofo.doSomethingBadAss();
//but not mofo.quoteBible();

var holyMan : Preacher = julesWinnfield;
holyMan.quoteBible();
//but not holyMan.doSomethingBadAss();
Run Code Online (Sandbox Code Playgroud)

PS:如果你想知道:接口没有钻石问题,因为接口的实现者必须提供接口中定义的每个成员的一个实现.因此,即使两个接口都定义了相同的成员(当然具有相同的签名),仍然只有一个实现.

  • 这就是我开始回答的原因:"在AS中无法实现多重继承." :) (22认同)
  • 使用OOP为CrazyGansta BadAss Preacher Jules建模+1.他不会以极大的报复和愤怒的愤怒来打击你. (2认同)