継承

すでにあるクラスを拡張して新しいクラスを作ることができます。

このとき、もとのクラスの性質や機能は新しいクラスでも利用できます。

このことを継承 といいます。

スーパークラス、サブクラス

クラス１を拡張してクラス２が作られたとき、

クラス１はクラス２のスーパークラスである

クラス２はクラス１のサブクラスである

といい、次のような図で表わします。

スーパークラスのことを親クラス、サブクラスのことを子クラスと言うこともあります。

直接の親子でなく、親の親などのときでもスーパークラス、サブクラスと言います。

サブクラスの定義

作成するクラス名の後ろに

extends スーパークラス名

の形式で記述します。 上の図の関係のクラス２を作る場合は次のようになります。

public class クラス２ extends クラス１ { ... }

属性の継承

スーパークラスで定義された属性はサブクラスに継承されます。

次のようにクラス１とクラス２が定義されている場合、

public class クラス１ { double x; double y; }

public class クラス２ extends クラス１ { double z; }

クラス１のインスタンスは

クラス２のインスタンスは

となります。 クラス１の項目にクラス２で定義された項目が加わった形です。

メソッドの継承

スーパークラスで定義されたメソッドはサブクラスでも利用できます。

メソッドが呼ばれたときの動作はつぎのとおりです。

（１） インスタンスの属するクラスでメソッドが定義されているときは、それが使われます。

（２） インスタンスの属するクラスでメソッドが定義されていないときは、スーパークラスで定義されている同じ名前のメソッドが使われます。

直接の親だけでなく、親の親の親...と順に探します。

（３） スーパークラスにもメソッドがみつからないときは、エラーとなります。

スーパークラスで定義されているメソッドと同じ名前のメソッドを サブクラスで再定義することを メソッドのオーバーライド といいます。

コンストラクタの継承

コンストラクタは継承されません。

サブクラスのコンストラクタが呼ばれたときは

スーパークラスのコンストラクタで記述された処理

サブクラスで記述された処理

の順に両方が行われます。