1
0

(java silver)オーバーライド

Last updated at Posted at 2024-05-01

JavaSilverでメモしたところ備忘録として残しておこうと思います。

オーバーライド

  • クラスを継承する際にスパークラスのメソッドをサブクラスで定義しなおすこと
  • オーバーライドする際はシグニチャ(メソッド名・メソッドの引数の数・引数の順番)は同じにする必要がある

使用するメリット

  • スーパークラスのメソッドを再利用することができ、記述量が減ること。変更がある際にも変更点が少なくなる

オーバーライドとの違い

  • オーバーロードは同じメソッド名で、引数の数・引数の順番が違うメソッドを定義すること

super句

  • super句を使うことでスパークラスのメソッドを使うことも可能
// スーパークラス
class SuperClass {
    int num1;
    int num2;
 
    public SuperClass(int num1, int num2){
        this.num1 = num1;
        this.num2 = num2;
    }
 
    public void method(){
        System.out.println("num1 + num2 = " + (num1 + num2));
    }
}
// サブクラス
class SubClass extends SuperClass{
    public ClassSub(int num1, int num2) {
        super(num1, num2);//SuperClassのコンストラクタを呼び出す
    }
 
    @Override
    public void method(){// SuperClassのmethod()をオーバーライドし処理を変更
        System.out.println("num1 * num2 = " + (num1 * num2)); 
        super.method(); // スーパークラスと同じ処理
    }
}
 
public class Main {
 
    public static void main(String[] args) {
        SubClass s = new SubClass(3, 5);//SubClassのコンストラクタを呼び出す
        s.method();
    }
 
}

Override (アノテーション)

  • アノテーションはオーバーライドを宣言するときに使用する
  • 記述しなくてもいいが記述した際はメソッドがオーバーライドしていないとコンパイルエラーが発生する

オーバーライドできない

  • staticメソッド
  • final修飾子が付与されているメソッド
  • throwsはスーパーメソッドのthrowsで指定した例外クラス以外
    サブクラスは除外
    スーパークラスのメソッドにthrowsがあっても、サブクラス側でthrowsを記述しないことは可能

privateなメソッドのオーバーライド

サブクラス側からprivateなメソッドは参照できないようになっているので単に別のメソッドとして解釈してコンパイルエラーも起こらない

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0