平凡エンジニアによる平凡ブログ

平凡インフラエンジニアがスキルアップを目指してプログラミングやクラウドやサーバといったインフラのアウトプットをしていきます!

【java】メソッドのオーバーライド、オーバーロードの違い(1)

今回のテーマ

今回と次回でjavaにおけるメソッドのオーバーライドと
オーバーロードについて説明します。

名前が似ているため間違いやすいです。
本記事ではオーバライドについて書きます。

オーバライドとは

オーバライドとは
「別クラス内で同じメソッド名で処理の中身を再定義し直す」ことです。

以下の例ではSuperClassで定義しているmethodを
Subclassでも定義しなおしてます。

※継承されている方をスーパクラス(SuperClass)、スーパクラスを継承した上で再定義している方をサブクラス(Subclass)とします。

public class SuperClass {
    public void method(){ //methodという名称でメソッドを定義      
        System.out.println("SuperClass"); //SuperClassという文字列を出力
    }
}

public class Subclass extends SuperClass{ //SuperClassを継承した上でSubclassを定義している。
    public void method(){ //methodという名称でメソッドを再定義(オーバライド)      
      System.out.println("Subclass"); //Subclassという文字列を出力
    }
}

オーバライドの条件

1.メソッド名と引数は同じ
上記例だとmethodという名称で、両方とも()で引数は設定しておりません。
しかし例えばスーパクラス側の引数を以下のように設定しているとすれば
引数の型、数、順番をサブクラス側でも合わせる必要があります。

public class SuperClass {
    public void method(int a,int b){ //intという型でそれぞれ引数a,bで設定している
        System.out.println("SuperClass"); 
    }
}

public class Subclass extends SuperClass{ 
    public void method(int a,int b){ //intという型でそれぞれ引数a,bで設定している
      System.out.println("Subclass"); 
    }
}

2.戻り値は同じかサブクラスになるかどうか
上記例だと戻り値はvoidという戻り値を返さない型になります。
例えば戻り値をStringと設定していればサブクラスもStringと設定する。

戻り値は簡単に言うと呼び出し元に値を返す値のことを言いますが ここでは詳細省きます。

戻り値 | 検索結果: | Javaコード入門

3.アクセス修飾子が同じかもしくは公開範囲が広いか
上記例だと両方ともpublicです。

例えばスーパクラスにpublicを設定しているのに関わらず
protected、デフォルト、privateは設定できないということになる。

アクセス修飾子とは
アクセス修飾子 | Javaコード入門

まとめ

本記事ではオーバーライドについて記載しました。
次の項目ではオーバーロードについてまとめます。

徹底攻略Java SE Bronze問題集[1Z0-818]対応 徹底攻略シリーズ