すでにあるクラスを拡張して新しいクラスを作ることができます。
このとき、もとのクラスの性質や機能は新しいクラスでも利用できます。
このことを継承といいます。
クラス1を拡張してクラス2が作られたとき、
といい、次のような図で表わします。
スーパークラスのことを親クラス、サブクラスのことを子クラスと言うこともあります。
直接の親子でなく、親の親などのときでもスーパークラス、サブクラスと言います。
作成するクラス名の後ろに
の形式で記述します。 上の図の関係のクラス2を作る場合は次のようになります。
public class クラス2 extends クラス1 { ... }
スーパークラスで定義された属性はサブクラスに継承されます。
次のようにクラス1とクラス2が定義されている場合、
public class クラス1 { double x; double y; }
public class クラス2 extends クラス1 { double z; }
クラス1のインスタンスは
クラス2のインスタンスは
となります。 クラス1の項目にクラス2で定義された項目が加わった形です。
スーパークラスで定義されたメソッドはサブクラスでも利用できます。
メソッドが呼ばれたときの動作はつぎのとおりです。
(1)インスタンスの属するクラスでメソッドが定義されているときは、それが使われます。
(2)インスタンスの属するクラスでメソッドが定義されていないときは、スーパークラスで定義されている同じ名前のメソッドが使われます。
(3)スーパークラスにもメソッドがみつからないときは、エラーとなります。
スーパークラスで定義されているメソッドと同じ名前のメソッドを サブクラスで再定義することを メソッドのオーバーライドといいます。
コンストラクタは継承されません。
サブクラスのコンストラクタが呼ばれたときは
の順に両方が行われます。