Udemyの人気コースが今なら80%OFF!

【Java入門】finalキーワードをクラス、メソッド、フィールドに付与した場合の挙動の違い

【Java入門】finalキーワードの使い方

finalキーワードをクラスに付与した場合

finalキーワードをクラスに付与した場合は継承不可になります。

Oya.java

public final class Oya {

    void methodA(){
        System.out.println("親クラスのメソッドAです。");
    }

    void methodB(){
        System.out.println("親クラスのメソッドBです。");
    }
}

Kodomo.java

public class Kodomo extends Oya{    //ここでコンパイルエラー

}
解説
Oyaクラスの宣言時にfinalを付与しているため、Oyaクラスは継承不可になります。(Kodomoクラス:1行目)

finalキーワードをメソッドに付与した場合

finalキーワードをメソッドに付与した場合はオーバーライド不可になります。

Oya.java

public class Oya {

    void methodA(){
        System.out.println("親クラスのメソッドAです。");
    }

    final void methodB(){
        System.out.println("親クラスのメソッドBです。");
    }
}

Kodomo.java

public class Kodomo extends Oya{

    @Override
    void methodA(){
        System.out.println("子クラスのメソッドAです。");
    }

    @Override
    void methodB(){//ここでコンパイルエラー。
        System.out.println("子クラスのメソッドBです。");
    }
}
解説
OyaクラスのmethodB宣言時にfinalを付与しているため、このメソッドはオーバーライド不可になります。(Kodomoクラス:9行目)

finalキーワードをフィールドに付与した場合

finalキーワードをフィールドに付与した場合は再代入不可になります。

Java

final  String str = "final";
    public static void main(String[] args) {

        str = "aiueo";//ここでコンパイルエラー。
    }
}
解説
フィールド宣言時にfinalを付与しているため、このフィールドは再代入不可になります。(4行目)

finalキーワードをメソッドの引数に付与した場合

finalキーワードをフィールドに付与した場合と同じく、メソッド内での再代入が不可になります。

Java

public static void main(String[] args) throws Exception {

    int x = 10;
    int y = 10;

    System.out.println(calc(x,y));
}

private static int calc(int x, final int y) {
    x = 20;
    y = 50; //ここでコンパイルエラー
    return x + y;
}
解説
引数yだけfinalキーワードを付与してみました。(9行目)
そのため、引数xは値を再代入できているのに、引数yは再代入できずコンパイルエラーになっています。(11行目)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です