ポリモーフィズムの前提知識
ポリモーフィズムは多態性、多様性などとも呼ばれます。ポリモーフィズムを実現させるためには次のような特徴を理解しておく必要があります。
- スーパークラスの型の変数に、サブクラスのオブジェクトを格納できる
- その変数では、スーパークラスで定義されているメソッドを呼び出すことができる
Javaは、クラスを作成すると暗黙のうちにObjectクラスのサブクラスとなります。つまり、Objectクラスのメソッドをどのクラスでも使用することができるわけです。どのようなメンバーで構成されているか「Java SE API & ドキュメント」で確認してみましょう。このような仕組みとなっているので、Object型の変数にはどんな種類のオブジェクトでも格納することができます。Object型は汎用型とも言えます。
次のサンプルでは、車とバスのクラスのオブジェクトをCar型の変数に代入して、動作を確認します。
○ ファイル
次のようにファイルを作成してください。
ファイル名 | PolymorphismTest.java |
---|
○ プログラム
次のようにプログラムを記述してください。
PolymorphismTest.java
- public class PolymorphismTest{
- public static void main(String[] args) throws Exception{
- //Carクラス型の変数を用意
- Car obj;
- //Carオブジェクトを生成
- obj = new Car();
- System.out.println("車のガソリン量:" + obj.getGas() + "L");
- //Busオブジェクトを生成
- obj = new Bus();
- System.out.println("バスのガソリン量:" + obj.getGas() + "L");
- }
- }
○ コンパイルと実行
C:¥work>javac PolymorphismTest.java
C:¥work>java PolymorphismTest
車のガソリン量:20.0L
バスのガソリン量:100.0L
C:¥work>
○ 解説
4行目では、Carクラス型の変数を宣言しています。そして7行目では、Carオブジェクトを生成して格納しています。ここでの使い方には変わった点はありません。
11行目では、Busオブジェクトを生成して、Car型の変数に格納しています。BusクラスはCarクラスを継承しているので、このような記述が可能です。12行目ではガソリン残量を参照しています。Carクラスで定義しているメンバーを利用することができます。ただし、Busクラスで定義しているメンバーは利用できません。
このように、一つの変数にいろいろな種類のオブジェクトを格納することができます。これを利用してポリモーフィズムを実現させます。