【Java SE 11 Silver対策】final修飾子について
お待たせしました。(誰も見てなくても言うやつ)
本日のテーマは『final修飾子』
finalと言えば、定数に使う修飾子ですよね、はい。・・・・それ以外の用途は出てきますか?
出てきませんが、実はクラスにも、メソッドにも付けられたりします。
なんとなーく見たことあるような見たことないような・・・ちょっとふわふわしていたので、調べてみました。
とりあえず三つあるらしい
①final 変数 → 定数
②final メソッド → オーバーライド禁止
③final クラス → 継承禁止
あれ・・・②と③知らんかった・・・そうだっけ?え?皆さん知ってました?
確認してみよう!
①final 変数 → 定数
public class Main {
public static void main(String args) throws Exception {
// 定数
final String STR = "aaa";
System.out.println(STR);
}
}
◆出力
aaa
②final メソッド → オーバーライド禁止
public class Main {
public static void main(String args) throws Exception {
Parent parent = new Child();
parent.test();
}
}
class Parent {
final void test(){
System.out.println("サンダー");
}
}
class Child extends Parent {
@Override
void test(){
System.out.println("サンダガ");
}
}
◆出力
Main.java:17: error: test() in Child cannot override test() in Parent
void test(){
^
overridden method is final
1 error
③final クラス → 継承禁止
final class Parent {}
class Child extends Parent {}
◆出力
Main.java:14: error: cannot inherit from final Parent
class Child extends Parent {
^
1 error
たしかに、そんな感じのエラーが出てますね。()
実際にソースを打ち込んだので、これはもう忘れないでしょう!(という願い)
というわけで今回は『final修飾子』についてでした~
①final 変数 → 定数
②final メソッド → オーバーライド禁止
③final クラス → 継承禁止
ま~た~あ~した~