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 のボタン 1 ですか?

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です。BABbutton1

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 に答える