as3 スーパークラス、クラスの継承について

2011/11/24

「スーパークラスって何さ?」ってことで、まず「クラスの継承」ってヤツを知る必要がある。
「クラスの継承(Inheritance)」ってヤツは既存のクラスに一部機能・処理を追加したいってときに使う。

下図でいうところの「クラスA」が「継承される側のクラス」で「親クラス」や「スーパークラス」「基本クラス」「基底クラス」と呼ばれ、「クラスB」が「継承する側のクラス」で「子クラス」や「サブクラス」「派生クラス」と呼ばれる。

「クラスの継承」ってのを使う理由?

継承しなければ親クラスをコピーしてきて新しいクラスを作ればいい。
ただ、それが面倒。

「クラスの継承」をしない場合

例えば、求めているクラスは、「クラスA」に近い。
じゃぁ「クラスA」をコピー・ペーストして足りない「処理・機能」を追加して「クラスA´」を作ろう。
この場合「クラスA」に何かしらの問題が発生すると「クラスA」と「クラスA´」内の「クラスA」の両方を修正。

「クラスの継承」ってのをしていれば親である「クラスA」のみ修正すればOK

親クラスの修正・上書き「オーバーライド(override)」

親クラスの機能・処理の一部が気にいらないってときは「オーバーライド(override)」ってのを使うと解決できる。

親クラスの「メソッドfoo」が気にいらない。でも「メソッドfoo」って名前は使いたいってときに使う。

サンプルソース

  1. package
  2. {
  3.   //スーパークラス
  4.   public class SuperClass
  5.   {
  6.     protected function method1():void
  7.     {
  8.       trace("method1_super");
  9.     }
  10.     
  11.     protected function method2():void
  12.     {
  13.       trace("method2");
  14.     }
  15.   }
  16. }
  17.  
  18. package
  19. {
  20.   // サブクラス
  21.   //「SuperClass」を「継承する(extends)」
  22.   public class SubClass extends SuperClass
  23.   {
  24.     public function SubClass()
  25.     {
  26.       // サブクラス内で親クラスのメソッドを使うときは「super」を使う
  27.       super.method1; // 親の「method1()」を実行
  28.       method1();     // 自身の「method1()」を実行
  29.     }
  30.     
  31.     // 親のメソッドを上書き(override)する
  32.     // アクセス修飾子(protected)を親と子で一致させる
  33.     // アクセス修飾子を「private」にするとコンパイルエラーを起こす
  34.     // 親と同じメソッド名を使う場合は「override」
  35.     protected override function method1():void
  36.     {
  37.       trace("method1_sub");
  38.     }
  39.   }
  40. }
  41.  
  42. // サブクラスの生成
  43. var sc:SubClass = new SubClass();
  44. // 実行結果
  45. // method1_super
  46. // method1_sub
  47.  
  48. // 親クラスのメソッドを実行
  49. sc.method2();
  50. // 実行結果
  51. // method2

新着(ニュース関連以外)

2018-07-26
年賀状で「新春」とか書くけど・・・何故なんだろうと8月を目前にした今、疑問に思った。
2018-05-16
PHPで画像のヘッダ情報(?)の「Orientation」を元に画像回転させたい。
2018-03-05
Android Studioをインストール。エミュレータを軽くするトコまで終わらせたかったけど、挫折した。
2018-02-23
プッシュ通知について調べてた時にでてきたServiceWorker。そのServiceWorkerについてのメモ。
2017-12-13
jqueryで取得したDOM要素をオブジェクトじゃなくて、配列で受け取りたい