Java

【Java】オーバーライドとシグニチャ

こんにちは、ともです。

Javaのオーバーライドについて理解をまとめておきます。

オーバーライドとは

オーバーライドとは、子クラスで親クラスのメソッドを再定義することです。

次のように親クラスを作成します。

// 親クラス
public class A {
  protected Number method(int a, double b) {
       return 0;
  }
}

// 子クラス
public class B extends A{
  public int method(int a, double b) {
       return 1;
  }
}

親で定義したmethodを子クラスで再定義しています。

では、再定義のために3つの注意する点があります。

オーバライドの条件

  1. アクセス修飾子は同じか、より緩い条件
  2. returnで返す型は同じか、そのサブクラス
  3. シグニチャが同じ

上記の3つに注意すればオーバーライドできます。

アクセス修飾子は同じか、より緩い条件

// 親クラス
public class A {
  protected Number method(int a, double b) {
       return 0;
  }
}

// 子クラス
public class B extends A{
  public int method(int a, double b) {
       return 1;
  }
}

上記の例では、

  • 親クラスの修飾子はprotected
  • 子クラスの修飾子はpublic

となっています。

アクセス修飾子同じかより緩い条件を満たしています。

returnで返す型は同じか、そのサブクラス

// 親クラス
public class A {
  protected Number method(int a, double b) {
       return 0;
  }

}

// 子クラス
public class B extends A{
  public int method(int a, double b) {
       return 1;
  }
}

上記の例では、

  • 親クラスのreturnは「Number」
  • 子クラスのreturnは「int」

となっています。

returnで返す型が同じかサブクラスという条件を満たしています。

シグニチャが同じ

// 親クラス
public class A {
  protected Number method(int a, double b) {
       return 0;
  }

}

// 子クラス
public class B extends A{
  public int method(int a, double b) {
       return 1;
  }
}

シグニチャとは

  • メソッド名、引数の型、引数の順番

を指します。

method(int a, double b)の部分がシグニチャです。

上記の例では、method(int a, double b)の部分が、

  • メソッド名が同じ
  • 引数の型が同じ
  • 引数の順番が同じ

なので、同じシグニチャであり、条件を満たしています。

まとめ

オーバーロードについて理解をまとめました。

JavaSilverの取得に向けて勉強中ですが、今回の勉強で頭が整理されました。

JavaSilverの勉強はとてもプログラミングの基礎を学ぶのに良いですね。