前回はオブジェクト指向プログラミングを概観しました。 以下の用語を説明できるようになりました (なっているといいなぁ)。
前回のクラス 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 に標準で付属しているクラスを拡張するときに便利です。
少しずつ違うクラスを複数作るときに、共通部分は一度作るだけでいいので楽です。 これは説明することが多くなるので次回取り上げます。
継承について学びました。
オブジェクト指向に慣れてもらうために課題を出します。