0

class A用字段创建:

public var button1:Button;
public var button2:Button;

class B extends class A并且只有领域

public var button1:Button;

我创建一个这样的对象:

var but:A = new B();

然后我把它放在代码中:

but.button1.someproperty = ...

哪个按钮真正被提及?button1 是 A 类中的按钮还是 B 类中的 button1?

4

2 回答 2

1

不允许覆盖变量。如果已经具有该名称的变量,则不能定义public var button1:Button;in 。应该是编译错误。class B extends class Aclass A

Adobe教程的摘录:

使用 var 或 const 关键字声明的属性会被继承,但不能被覆盖。覆盖属性意味着重新定义子类中的属性。唯一可以覆盖的属性类型是方法,即使用 function 关键字声明的属性。尽管您不能覆盖实例变量,但您可以通过为实例变量创建 getter 和 setter 方法并覆盖这些方法来实现类似的功能。

更多信息请阅读这里

于 2013-04-16T08:14:44.047 回答
0

该变量but属于该类型A,但包含该类型的一个实例,该实例是该类型B的子类型A(并且因此与该变量兼容)。所以最后,它指向一个实例B;所以你button1会是B。

请注意,它B还有一个 button1,因为它是在中定义的A(尽管它仍然属于B)。

最后,你不能真正做到这一点,因为它不可能覆盖字段,所以你不能button1再次定义B(因为它已经在 中定义A)。显示扩展类型效果的更好示例如下所示:

public class A
{
    public function test() : void
    {
        trace('test() in A!');
    }
}
public class B extends A
{
    public function test() : void
    {
        trace('test() in B!');
    }
}

var x:A = new B();
x.test();
于 2013-04-16T08:17:12.490 回答