メソッドとプロパティのオーバーライド

サブクラスがスーパークラスを拡張する場合、サブクラスはスーパークラスのすべてのメソッドとプロパティを継承します。クラスを使用し、既存のクラスを拡張することの利点の 1 つとして、既存のクラスに新しい機能を提供できるだけでなく、既存の機能を変更することもできます。たとえば、例 : Widget クラスの拡張で作成した Widget クラスについて考えます。スーパークラス (Widget) で新しいメソッドを作成し、そのメソッドをサブクラス (SubWidget) でオーバーライドすることも、Widget クラスから継承したメソッドをそのまま使用することもできます。次の例では、クラス内の既存のメソッドをオーバーライドする方法を示します。

サブクラスでメソッドをオーバーライドするには :

  1. 新しい ActionScript ドキュメントを作成し、Widget.as という名前で保存します。
  2. "Widget.as" で、スクリプトウィンドウに次の ActionScript コードを入力します。

    メモ : 前の例で Widget クラスを作成した場合は、次のように doSomething() メソッドを追加することによって既存のメソッドを変更します。

    class Widget {
        public static var widgetCount:Number = 0;
        public function Widget() {
            Widget.widgetCount++;
        }
        public function doSomething():Void {
            trace("Widget::doSomething()");
        }
    }
    
  3. ActionScript ドキュメントの変更を保存します。

    Widget クラスは、コンストラクタと doSomething() というパブリックメソッドを定義するようになりました。

  4. SubWidget.as という新しい ActionScript ファイルを作成し、"Widget.as" と同じディレクトリに保存します。

    メモ

     

    例 : Widget クラスの拡張で SubWidget クラスを作成した場合は、代わりにこのファイルを使用できます。

  5. "SubWidget.as" で、スクリプトウィンドウに次の ActionScript コードを入力します。
    class SubWidget extends Widget {
        public function SubWidget() {
            trace("Creating subwidget # " + Widget.widgetCount);
            doSomething();
        }
    }
    
  6. "SubWidget.as" の変更を保存します。

    SubWidget クラスのコンストラクタは、スーパークラスで定義した doSomething() メソッドを呼び出します。

  7. 新しい Flash ドキュメントを作成し、subWidgetTest.fla という名前で ActionScript ドキュメントと同じディレクトリに保存します。
  8. "subWidgetTest.fla" で、メインタイムラインのフレーム 1 に次の ActionScript を入力します。
    var sw1:SubWidget = new SubWidget();
    var sw2:SubWidget = new SubWidget();
    
  9. Flash ドキュメントの変更を保存します。
  10. [制御]-[ムービープレビュー] を選択して Flash ドキュメントをテストします。[出力] パネルに次の結果が表示されます。
    Creating subwidget # 1
    Widget::doSomething()
    Creating subwidget # 2
    Widget::doSomething()
    

    この出力は、SubWidget クラスのコンストラクタがスーパークラス (Widget) のコンストラクタを呼び出し、これにより静的 widgetCount プロパティがインクリメントされたことを示しています。SubWidget のコンストラクタは、スーパークラスの静的プロパティをトレースし、スーパークラスから継承する doSomething() メソッドを呼び出します。

  11. SubWidget クラスを開き、doSomething() という新しいメソッドを追加します。次のコードと一致するようにクラスを変更します (ボールド体のコードを追加します)。
    class SubWidget extends Widget {
        public function SubWidget() {
            trace("Creating subwidget # " + Widget.widgetCount);
            doSomething();
        }
        public function doSomething():Void {
            trace("SubWidget::doSomething()");
        }
    }
    
  12. クラスファイルの変更を保存し、"subwidgetTest.fla" をもう一度開きます。
  13. [制御]-[ムービープレビュー] を選択してファイルをテストします。[出力] パネルに次の結果が表示されます。
    Creating subwidget # 1
    SubWidget::doSomething()
    Creating subwidget # 2
    SubWidget::doSomething()
    

    前の出力は、SubWidget クラスのコンストラクタ内の doSomething() メソッドが、スーパークラスではなく現在のクラス内の doSomething() メソッドを呼び出していることを示しています。

    SubWidget クラスをもう一度開き、スーパークラスの doSomething() メソッドを呼び出すように SubWidget クラスのコンストラクタを変更します (ボールド体のコードを追加します)。

        public function SubWidget() {
            trace("Creating subwidget # " + Widget.widgetCount);
            super.doSomething();
        }
    

    前に説明したように、super キーワードを追加して、現在のクラスの doSomething() メソッドの代わりにスーパークラスの doSomething() メソッドを呼び出すことができます。super の詳細については、『ActionScript 2.0 リファレンスガイド』の「super」の項目を参照してください。

  14. 変更したコンストラクタと共に SubWidget クラスファイルを保存し、[制御]-[ムービープレビュー] を選択して、Flash ドキュメントを再パブリッシュします。

    [出力] パネルに、Widget クラスの doSomething() メソッドの内容が表示されます。


 

このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート

現在のページ: http://livedocs.adobe.com/flash/9.0_jp/main/00000824.html