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