如果我有三个班级:
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()
}
}
答案 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
函数,并在子类中覆盖它。
实现一个接口,而不是扩展一个基类,或同时执行这两个接口,可以让functionThatReceivesAnExtendedExample
在func
上调用ex
而不关心{{1}对象是,并且没有ex
类必须实现Example
函数,如在您的示例中。所以像这样的东西,建立在你的示例代码上:
func