AS3:访问不在超类中的扩展类的对象属性或函数

时间:2012-01-29 15:03:16

标签: flash actionscript-3 flash-builder flashdevelop

如果我有三个班级:

public class Example {
   public function Example () {

   }
}

public class ExtendedExample extends Example {
   public function func ():void {
        //here is what this class does different that the next
   }
   public function ExtendedExample () {

   }
}

public class AnotherExtendedExample extends Example {
   public function funct ():void {
       //here is what this class does, and it is differente from ExtendedExample
   }
   public function AnotherExtendedExample () {

   }
}

您可以看到最后两个类扩展了第一个类,并且都具有'variable'属性。如果我有一个Example实例,并且我确定它也是一个ExtendedExample OR AnotherExtendedExample实例,有没有办法访问'variable'属性?像

这样的东西
function functionThatReceivesAnExtendedExample (ex:Example):void {
    if(some condition that I may need) {
        ex.func()
    }

}

3 个答案:

答案 0 :(得分:1)

如果变量在某些子类中使用,但不在所有子类中使用,并且您尚未在父类中定义它,则仍可以尝试访问它。我建议快速施法:

if (ex is AnotherExtenedExample || ex is ExtendedExample)
{
    var tmpex:ExtendedExample = ex as ExtendedExample;
    trace (tmpex.variable);
}

您还可以将其强制转换为动态对象类型,并尝试在try..catch块中访问该属性。我建议使用如上所述的转换,逻辑更容易理解。

如果变量在所有子类中使用,只需在父类中定义它,并在每个子类中为它指定一个特定的值。

答案 1 :(得分:1)

@Lucas将您的代码更改为以下代码

function functionThatReceivesAnExtendedExample (ex:Example):void {
    if(ex is ExtendedExample) {
        (ex as ExtendedExample).func()
    } else if(ex is AnotherExtendedExample)
    {
        (ex as AnotherExtendedExample).funct() 
    }
}

希望这会有所帮助

答案 2 :(得分:0)

正如RIAstar在评论中所说,最明显的方法是让Example也有一个func函数,并在子类中覆盖它。

实现一个接口,而不是扩展一个基类,或同时执行这两个接口,可以让functionThatReceivesAnExtendedExamplefunc上调用ex而不关心{{1}对象是,并且没有ex类必须实现Example函数,如在您的示例中。所以像这样的东西,建立在你的示例代码上:

func