リュックに何いれる?

一人暮らし・itエンジニア・読書

【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 クラス → 継承禁止


ま~た~あ~した~