ActionScript 3
オブジェクト指向プログラミング
サーチ…
静的メソッドを使用して "オーバーロードされた"コンストラクタ
コンストラクターのオーバーロードはAs3では使用できません。
クラスのインスタンスを取り出す別の方法を提供するために、代替public static
メソッドを提供して、代替の "コンストラクタ"として機能させることができます。
その例は、2D点オブジェクトを表すflash.geom.Point
です。ポイントを定義する座標は
通常のコンストラクタのデカルト
public function Point(x:Number = 0, y:Number = 0)
使用例:
var point:Point = new Point(2, -.5);
静的メソッドの極座標
public static function polar(len:Number, angle:Number):Point
使用例:
var point:Point = Point.polar(12, .7 * Math.PI);
実際のコンストラクタではないので、
new
キーワードはありません。
関数の設定と取得
カプセル化を確保するために、クラスのメンバ変数をする必要がありprivate
のみにアクセスできるpublic
公衆経由でget
/ set
アクセス方法。プライベートフィールドの_
を付けておくのが一般的です。
public class Person
{
private var _name:String = "";
public function get name():String{
return _name;
//or return some other value depending on the inner logic of the class
}
public function set name(value:String):void{
//here you may check if the new value is valid
//or maybe dispatch some update events or whatever else
_name = value;
}
場合によっては、 get
/ set
ペアのprivate
フィールドを作成する必要もありません。
たとえば、カスタムラジオグループのようなコントロールでは、ラジオボタンが選択されていることを知る必要がありますが、クラス外では選択した値だけをget
/ set
する方法が必要です。
public function get selectedValue():String {
//just the data from the element
return _selected ? _selected.data : null;
}
public function set selectedValue(value:String):void {
//find the element with that data
for (var i:int = 0; i < _elems.length; i++) {
if (_elems[i].data == value) {
_selected = _elems[i];//set it
processRadio();//redraw
return;
}
}
}
パッケージ
パッケージはクラスのバンドルです。すべてのクラスは、 package
ステートメントを使用してpackage
内で宣言する必要があります。 package
ステートメントの後ろには、パッケージの名前が続きます。または、最上位パッケージにクラスを追加する場合は、何も続きません。サブパッケージは、ドット( .
)区切りを使用して作成されます。 packageステートメントの後には、単一のclass
定義を含むブロックが続きます 。例:
package {
// The top level package.
}
package world {
// A package named world.
}
package world.monsters {
// A package named monsters within a package named world.
}
パッケージは、ソースルートを基準にしたクラスのファイル構造と相関する必要があります。 src
という名前のソースルートフォルダがあると仮定すると、上記はファイルシステムで正しく表現できます。
src
TopLevelClass.as
world
ClassInWorldPackage.as
AnotherClassInWorldPackage.as
monsters
Zombie.as
メソッドのオーバーライド
クラスをextend
するときは、継承されたクラスがoverride
キーワードを使用して定義するメソッドをoverride
できoverride
。
public class Example {
public function test():void {
trace('It works!');
}
}
public class AnotherExample extends Example {
public override function test():void {
trace('It still works!');
}
}
例:
var example:Example = new Example();
var another:AnotherExample = new AnotherExample();
example.test(); // Output: It works!
another.test(); // Output: It still works!
super
キーワードを使用すると、継承されるクラスから元のメソッドを参照できます。たとえば、 AnotherExample.test()
本文を次のように変更できます。
public override function test():void {
super.test();
trace('Extra content.');
}
その結果:
another.test(); // Output: It works!
// Extra content.
クラスコンストラクタのオーバーライドは少し異なります。 override
キーワードは省略され、継承されたコンストラクタへのアクセスは単にsuper()
行われます:
public class AnotherClass extends Example {
public function AnotherClass() {
super(); // Call the constructor in the inherited class.
}
}
get
メソッドとset
メソッドをオーバーライドすることもできます。
ゲッターとセッター
ゲッターとセッターは、プロパティのように動作するメソッドです。それは彼らが機能構造を持っていることを意味しますが、使用されるとき、それらはプロパティとして同じように使用されます:
ゲッター関数の構造 :
彼らは、引数のないキーワード、関数名の前、関数名の前にget
キーワードをfunction
必要があります。戻り値の型は指定されていて、値を返さなければなりません:
public function get myValue():Type{
//anything here
return _desiredValue;
}
構文 :
getterから値を取得するには、構文はプロパティから値を取得するのと同じです(parens ()
は使用されません)。
trace(myValue);
セッター関数の構造 :
function
キーワードの後にキーワードをset
、関数名の前に1つの引数を設定し、値を返さないでください。
public function set myValue(value:Type):void{
//anything here
_desiredProperty=value;
}
構文 :
setterの値を設定する場合、構文は、値をプロパティに設定することと同じです(等号=
と値を使用)。
myValue=desiredValue;
1つの値に対してゲッターとセッターを設定する :
注:ゲッターのみを作成するか、名前付きセッターのみを作成する場合、そのプロパティーは読み取り専用またはset-onlyになります。
プロパティを読み込み可能と設定可能にするには、getterとsetterを以下のように作成する必要があります。
1.同じ名前。
2.同じ型(ゲッターの戻り値の型とセッターの入力値(引数)の型、
注意:gettersとsetterは、他のプロパティやメソッドと同じ名前を持つべきではありません。
getterとsetterの使い方:
通常のプロパティではなくgetterとsetterを使用することは、多くの賛辞を持っています:
1. 読み取り専用または設定のみのプロパティを作成する:
たとえば、表示オブジェクト内の子の数です。それは設定できません。
プライベートプロパティへのアクセス:
例:
private var _private:Type=new Type();
//note that function name "private" is not same as variable name "_private"
public function get private():Type{
return _private;
}
3. 値を設定した後に何らかの変更が必要な場合:
この例では、このプロパティの変更を通知する必要があります。
public static function set val:(input:Type):void{
_desiredProperty=input;
notifyValueChanged();
}
他の多くの用途