第 6 回 オブジェクト指向プログラミング (2)

前回の復習

前回はオブジェクト指向プログラミングを概観しました。 以下の用語を説明できるようになりました (なっているといいなぁ)。

アクセス制限

前回のクラス complex には public なメンバと private なメンバがありました。 その違いについて説明します。 private なメンバ は他のクラスからアクセスできず、 public なメンバ にはどのクラスからでも自由にアクセスできます。

複素数のクラスでは実部と虚部を表す変数 (re, im) が private になっています。 これにより、 re, im はクラス complex からしかアクセスできません。 他のクラスからは、 complex のほかのメソッドを通じた間接的アクセスしかできません。

アクセス制限を適切に行うことによって、 変数やメソッドの意図しない使用を防ぐことができます。

今回の内容

既存のクラスを拡張して新しいクラスを作る 継承 について学びます。

継承

継承されるクラスを スーパークラス や 親クラス と呼び、 継承したクラスを サブクラス や 子クラス と呼びます。 子クラスは親クラスのメンバ (変数・メソッド) を受け継ぐので、 それらのメンバは同じように使うことができます。 親にはないメンバを追加して、新たなクラスを作ります。

子クラスの作成

クラス Parent を継承した子クラス Child を作るには以下のようにします。

class Child extends class Parent{
  // メンバを追加する
}

メソッドのオーバーライド

親クラスにあるメソッドを子クラスでも定義することを オーバーライド といいます。 そのメソッドを呼び出すと、子クラスのメソッドが呼ばれます。

子クラスの型

クラス Parent を継承したクラス Child は、クラス Parent としても扱えます。

// 例
Parent a = new Child();

上の例のような a を使ってメソッドを呼び出すときは注意する必要があります。 オーバーライドされたメソッドを呼び出すと、 Parent 型の変数に入っていても Child で定義されたメソッドが呼ばれます。

継承の便利な使い方

ただ拡張するだけなら継承を使うメリットはあまりありません。 以下では継承の典型的な使われ方を学びます。

親クラスに手を入れたくない

例えば、親クラスを作ったのが自分でない場合がそれに当たります。 特に、 Java に標準で付属しているクラスを拡張するときに便利です。

少しずつ違うクラスを複数作りたい

少しずつ違うクラスを複数作るときに、共通部分は一度作るだけでいいので楽です。 これは説明することが多くなるので次回取り上げます。

まとめ

継承について学びました。

オブジェクト指向に慣れてもらうために課題を出します。