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行目)
以上で記事の解説はお終い!
もっとJavaやSpringを勉強したい方にはUdemyがオススメ!同僚に差をつけよう!