@634

修飾子の実験

Advertisement

クラス修飾子 final

final修飾子がついているクラスは派生禁止。extendsすることができない。
コンパイル時にエラーとして警告される。
public class FinalTest{
    public static void main(String args[]){
        Sub s1 = new Sub();
        s1.resultOutput();
    }
}

class Sub extends Base{
    public void resultOutput(){  //オーバーライド
        System.out.println(num1 - num2);
    }
}

final class Base{  //final
    int num1 = 10;
    int num2 = 20;

    public void resultOutput(){
        System.out.println(num1 + num2);
    }
}
コンパイルの結果
finalTest.java:8: final Base からは継承できません。
class Sum extends Base{
                  ^
エラー 1 個

メソッド修飾子 final

メソッドにfinal修飾子をつけるとオーバーライドが禁止される。
public class FinalTest{
    public static void main(String args[]){
        Sub s1 = new Sub();
        s1.resultOutput();
    }
}

class Sub extends Base{
    public void resultOutput(){  //オーバーライド
        System.out.println(num1 - num2);
    }
}

class Base{
    int num1 = 10;
    int num2 = 20;

    final public void resultOutput(){  //final
        System.out.println(num1 + num2);
    }
}
コンパイルの結果
finalTest.java:9: Sub の resultOutput() は Base の
 resultOutput() をオーバーライドできません。;
  オーバーライドされたメソッドは final です。
    public void resultOutput(){
                ^
エラー 1 個

変数の修飾子 final

変数にfinalをつけると定数となり、値の変更が不可能となる。
public class FinalTest{
    public static void main(String args[]){
        Base b1 = new Base();
        b1.resultOutput();
    }
}

class Base{
    final int num1 = 10;  //final
    int num2 = 20;

    public void resultOutput(){
        num1++;  //num1をインクリメント
        System.out.println(num1 + num2);
    }
}
結果
finalTest.java:13: final 変数 num1 に値を代入することはできません。
    num1++; //num1をインクリメント
    ^
エラー 1 個

まとめ

finalは、何を修飾するかによって意味が異なる。
修飾部分意味
クラス派生の禁止
メソッドオーバーライドの禁止
変数定数(値の変更の禁止)

Advertisement

ショートカット

634
634ブログ
このカテゴリのトップページに戻る
Incubator(Pukiwiki)
634ラボ
   UIコレクションギャラリー
   ZO-3ジェネレーター

サイト検索


Y!ログール