Home > ActionScript 3.0 > ActionScript 3.0 :: ネームスペースを付加したメソッドのオーバーライド

ActionScript 3.0 :: ネームスペースを付加したメソッドのオーバーライド

ネームスペース(名前空間)、使ってますか?実際便利なんですが、あんまり使っている人見ないですよね。

さて、ネームペースが付加されているメソッドのオーバーライドは、ただoverrideキーワードを付加するだけではうまくいかず、スコープに注意を払う必要があります。

クラスレベルのネームスペースを付加したメソッドを継承する

クラスレベルのスコープ。つまりclassキーワードで括られた範囲内のスコープに定義されたネームスペースをメソッドに定義した場合です。この場合の注意点は、スーパークラスで定義されているネームスペースは、サブクラスでもアクセスできなければならない。ということです。ActionScript 3.0の仕様では、internal(パッケージ内のみアクセス可)になり、それ以外にpublic(どこからでもアクセス可)、protected(サブクラスのみアクセス可)、private(外部からアクセス不可)の四つのアクセス制御指定子が存在します。ここでは、サブクラスでアクセスしなければならないため、protectedを指定します。あとは、いつもと同様にオーバーライドをかけるだけです。

パッケージレベルのネームスペースを定義する。

パッケージ内で共通してネームスペースを定義したい場合、パッケージレベルのスコープにネームスペースを定義します。このとき、asファイル名はクラスの時と同様、ネームスペース名と同一にします。

パッケージレベルのネームスペースを付加したメソッドを継承する

パッケージレベルのスコープ。packageキーワードで括られた範囲内のスコープに定義されたネームスペースをメソッドに定義した場合です。この場合の注意点は、パッケージ内でネームスペースを開かなければならない。ということです。なぜなら、ActionScriptはクラスレベルのスコープが対象になっているからです。そのため、use namespaceディレクティブを使用してネームスペースを開く必要があります。ややこしいですね。

ネームスペースを付加したメソッドのスーパーバージョンにアクセスする

見事ネームスペースを付加したメソッドのオーバーライドに成功したら、もちろんスーパーバージョンにアクセスしたくなりますよね。通常のオーバーライドでは、super.someMethod();のような形式をとりますが、ネームスーペースが付加されたメソッドでは、まずネームスペースをクッションにした上で呼び出さなければなりません。クッションには、super.SomeNameSpace::someMethod();という形式で行います。

package com{
	namespace PACKAGE_LEVEL = "http://example.com/package_level";
}

package com {
	
	import com.PACKAGE_LEVEL;
	use namespace PACKAGE_LEVEL
	
	public class SubClass extends SuperClass {
		
		public function SubClass():void {
			CLASS_LEVEL::test();
			PACKAGE_LEVEL::test();
		}
		
		override CLASS_LEVEL function test():void {
			super.CLASS_LEVEL::test();
			trace("class_level::sub")
		}
		
		override PACKAGE_LEVEL function test():void {
			super.PACKAGE_LEVEL::test();
			trace("package_level::sub")
		}
		
		
	}
	
}

package com {
	
	import com.PACKAGE_LEVEL;
	use namespace PACKAGE_LEVEL
	
	public class SuperClass {
		
		protected namespace CLASS_LEVEL = "http://example.com/test2";
		
		CLASS_LEVEL function test():void {
			trace("class_level::super")
		}
		
		PACKAGE_LEVEL function test():void {
			trace("package_level::super")
		}
		
	}
}

Summer Camp 2010 野中文雄のActionScript 3.0による 三次元表現

無料  ActionScript 3.0による 三次元表現 in アップルストア 銀座

フィジカルコンピューティング ラボラトリー

Comments:0

Comment Form

コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。

Trackbacks:0

TrackBack URL for this entry
http://xingxx.com/mt/mt-tb.cgi/76
Listed below are links to weblogs that reference
ActionScript 3.0 :: ネームスペースを付加したメソッドのオーバーライド from xingxx

Home > ActionScript 3.0 > ActionScript 3.0 :: ネームスペースを付加したメソッドのオーバーライド

Search
Feeds
Tag Cloud

Return to page top