在Actionscript中继承实例变量

时间:2013-04-16 08:08:35

标签: inheritance actionscript

我使用字段创建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?

2 个答案:

答案 0 :(得分:1)

不允许覆盖变量。如果public var button1:Button;已经拥有该名称的变量,则无法在class B extends class A中定义class A。它应该是编译错误。

摘自Adobe的教程:

  

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

了解更多read here

答案 1 :(得分: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();