オーバーロードとオーバーライド

2010 年 6 月 18 日 金曜日  【 カテゴリー: Javaの基本


オーバーロード と オーバーライドについてみてきました。今回は復習として両方を混合してみていきたいと思います。

サンプル

【SuperClass.java】

class SuperClass {
    //メソッド
    void method(){
    	System.out.println("スーパークラス : メソッド");
    }
    //メソッド
    void method(int x){
    	System.out.println("スーパークラス : メソッド(引数あり)");
    }
}

java085

スーパークラスではメソッドを2つ用意しました。2つともメソッド名は「method」で仮引数の型や個数が違う「オーバーロード」です。仮引数の型や個数が違うので、引数のパターンからどの「method」メソッドを実行するのか区別できます。

【SubClass.java】

class SubClass extends SuperClass {
    //メソッド
    void method(){
    	System.out.println("サブクラス : メソッド");
    }
    void method(char x){
    	System.out.println("サブクラス : メソッド (引数あり)");
    }
}

java086

「SubClass」は「SuperClass」を継承しているので「SuperClass」の2つのメソッドを引き継ぎます。さらに「SubClass」でも同じ名前のメソッドを2つ追加しました。
「SubClass」で追加した2つの「method」メソッドについて詳しくみていきます。

void method(){

3行目で宣言したメソッドです。メソッド名「method」で引数なしのパターンはスーパークラスで既に宣言しています。このままでは引数なしの「method」メソッドを呼び出したときにスーパークラスで宣言したメソッドなのかサブクラスで宣言したメソッドなのかわかりません。そこでこのような場合はサブクラスで宣言したメソッドを実行します。実質スーパークラスのメソッドをサブクラスで上書きしたことになり、このような処理を「オーバーライド」といいます。

void method(char x){

6行目で宣言したメソッドです。仮引数が char型の「method」メソッドはスーパークラスにはありません。よってこのメソッドの追加は拡張です。しかし「method」という名前は他に既にあるのでオーバーロード対象のメソッドになります。

【Sample.java】

public class Sample {
    public static void main(String[] args) {
    	SubClass obj = new SubClass();
    	obj.method();
    	obj.method(1);
    	obj.method('a');
    }
}
サブクラス : メソッド
スーパークラス : メソッド(引数あり)
サブクラス : メソッド (引数あり)

「SubClass」で利用できるメソッドは、引数パターンが異なる「method」メソッド3種類でした。
4行目は引数がありません。引数のないパターンはスーパークラスにもサブクラスにもありましたが、オーバーライドによりサブクラスの宣言で上書きされています。サブクラスの処理が実行されていることがわかります。5行目は int型の引数をもつパターンです。スーパークラスで宣言しそのまま継承されています。6行目はchar型の引数をもつパターンです。サブクラスで新規に宣言しました。

以上で「オーバーロード」と「オーバーライド」についてみてきました。同じ名前のメソッド名を複数扱うなど似ている箇所もありますが、意味や処理が全く違うので間違えないように注意してください。


にほんブログ村 IT技術ブログ Webサイト構築へ
にほんブログ村
【WEBサイト構築・プログラムブログ】
ランキング参加中!よろしければ「クリック」お願いします。
にほんブログ村 IT技術ブログ プログラム・プログラマへ
にほんブログ村
2010 年 6 月 18 日 金曜日  【 カテゴリー: Javaの基本

コメントをどうぞ

※管理者による確認後に表示されます。表示までしばらくお待ちください。