第 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 に標準で付属しているクラスを拡張するときに便利です。

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

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

まとめ

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

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