next up previous
: 多重定義 : オブジェクト指向言語 Java : オブジェクト指向言語 Java

継承

クラスベースのオブジェクト指向言語にとって重要な性質として 継承 (inheritance) がある.各オブジェクトが持つ「状態」は,そのオブジェクト が振る舞う挙動(メソッド)を司る重要な「性質」を表現している. 「性質」とは,言い換えれば「状態」と「メソッド」から表現され ると考えることができる.

そのため,既に存在するオブジェクトの「性質」を再利用することが,有効か つ自然な表現であることが考えられる.その再利用のことを 継承 (inheritance) という. 「クラスベース」のオブジェクト指向言語の場合は,雛形であるクラスにより その「性質」を表現しているので クラス継承(class inheritance) とも いう.

例えば,上で定義したクラス Airplane を外から制御可能な飛行機 としてみよう.


 class  ControledAirplane  inherits Airplane

     method スピードを増せ. is
    スピードを増す. end
method スピードを落とせ. is
スピードを落とす. end
end
inherits の次に示した名前( Airplane) より親クラスを示す. 親クラスに対して,子クラスのことを サブクラス(sub-class) という. サブクラスで定義した状態,メソッド以外の状態,メソッドは全て, 親クラスのそれを使う(継承する). このように,任意のクラスの子クラスを作り,状態,メソッドを継承すること ができる.

では Java で書いてみよう.しかし簡単には定義することはできない. まず,仮想的に定義したクラス同様にクラス ControledAirplane を定義すると以下のようになる.

class ControledAirplane extends Airplane {
  ControledAirplane(Tree t) {
    super(t);
  }
  public void Increment() {
    Speed++;
  }
  public void Decrement() {
    Speed--;
  }
}
よって,
クラスの状態とメソッドは,以下のようになる.
クラス 状態 メソッド
Controled Speed Flying()
Airplane Col WhatIsYourSpeed()
knownTree WhatIsYourColor()
Upper Increment()
Decrement()
このクラスも以下のように,メソッド main の中で生成することができ るので,コンストラクタを定義する必要がある.このクラスでは,親クラス (Java では superで示す)のコンストラクタを呼び出している.
ControledAirplane a = new ControledAirplane(t);
更に,このクラス定義では親クラスの変数 Speed を更新しているが, この変数宣言も private から protected に変更する必要がある. このように,継承される可能性のある変数は protected または public で宣言する必要がある.ここでは,クラス Airplane 内の変数 Speedprotected で定義しよう.
protected int Speed;

結果として, ControledAirplane のインスタンスを生成するので, 以下のように挙動を変更してみよう.

for(int i=0;i<21;i++) {
  for(int j=0;j<10000;j++){}      
    p.Seeing(); a.Flying();
    if(i==4) a.Increment();
  }
その結果,以下のような実行結果となる.
TStatus: false,ASpeed: 0,AColor: White
TStatus: true,ASpeed: 1,AColor: White
TStatus: true,ASpeed: 2,AColor: White
TStatus: true,ASpeed: 3,AColor: White
TStatus: true,ASpeed: 4,AColor: White
TStatus: true,ASpeed: 6,AColor: White
TStatus: true,ASpeed: 7,AColor: White
TStatus: true,ASpeed: 8,AColor: White
TStatus: true,ASpeed: 9,AColor: White
TStatus: true,ASpeed: 10,AColor: White
TStatus: true,ASpeed: 9,AColor: White
TStatus: true,ASpeed: 8,AColor: White
TStatus: true,ASpeed: 7,AColor: White
TStatus: true,ASpeed: 6,AColor: White
TStatus: true,ASpeed: 5,AColor: White
TStatus: true,ASpeed: 4,AColor: White
TStatus: true,ASpeed: 3,AColor: White
TStatus: true,ASpeed: 2,AColor: White
TStatus: true,ASpeed: 1,AColor: White
TStatus: false,ASpeed: 0,AColor: White
TStatus: false,ASpeed: 0,AColor: White
TStatus: false,ASpeed: 0,AColor: White
ASpeed4 より 6 になっていることがわ かる.

next up previous
: 多重定義 : オブジェクト指向言語 Java : オブジェクト指向言語 Java
平成12年8月9日