Javaのfinalのサンプルです。
目次
サンプル | 定数にする(final) |
定数のサンプル | |
定数を利用するファイル | |
定数が配列の場合 | |
クラスの継承を不可にする(final) | |
メソッドのオーバーライドを不可にする(final) |
定数にする(final)
static final 変数の型 変数名 |
- 変数の前にfinalをつけると変数に対して再代入が不可(変更不可)になります。定数と呼びます。
→staticは、クラスをインスタンス化せずに変数を使用できます。 - 定数名は、変数と区別が付くようにするため、大文字にします。単語で区切りがある場合はアンダスコア(_)をつけます。
定数のサンプル
package com.example.demo;
public class ResponseCode {
// インスタンスの生成を禁止する
private ResponseCode() {
}
public static final int RESPONSE_OK = 100;
public static final int RESPONSE_NG = 999;
}
8,9行目は、定数です。変数の前にfinalがあるので再代入が不可になります。
5行目は、コンストラクタをprivateにしてインスタンスの生成ができないようにしています。
定数を利用するファイル
package com.example.demo;
import static com.example.demo.ResponseCode.*;
public class Test1 {
public static void main(String[] args) {
System.out.println(RESPONSE_OK); // 100
System.out.println(RESPONSE_NG); // 999
}
}
3行目は、staticのimportを行っています。
定数を使用すると数値が文字列になるので可読性が上がります。
定数が配列の場合
定数を配列にすることも可能です。
package test1;
public class Test1 {
public static final String[] COLOR = {"赤","黄","青"}; // 定数
public static void main(String[] args) {
System.out.println(COLOR[0]); //赤
}
}
クラスの継承を不可にする(final)
final クラス名 |
クラスの前にfinalをつけるとクラスの継承が不可になります。
package test1;
final class Sample1{ // クラスの前にfinal
}
//class Sample2 extends Sample1 { // クラスの継承不可
//}
public class Test1 {
public static void main(String[] args) {
// Sample2 s2 = new Sample2();
}
}
3行目は、クラスの前にfinalがついています。クラスの継承が不可になります。
6行目は、Sample1クラスを継承しようとしますが、継承できません。コンパイルエラーになります。
以下のメッセージが表示されます。
「finalクラスをサブクラス化できません」
メソッドのオーバーライドを不可にする(final)
final 戻り値の型 メソッド名() |
メソッドの前にfinalをつけるとオーバーライドが不可になります。
package test1;
class Sample1{
final void print() { // メソッドの前にfinal
}
}
class Sample2 extends Sample1 {
//public void print() { // オーバーライド不可
//}
}
public class Test1 {
public static void main(String[] args) {
Sample2 s2 = new Sample2();
}
}
4行目は、メソッドの前にfinalがあるのでオーバーライドが不可になります。
9行目は、printメソッドをオーバーライドしようとしますが、オーバーライドできません。コンパイルエラーになります。
以下のメッセージが表示されます。
「finalメソッドをオーバーライドできません」
関連の記事
Java staticメソッド/変数 (newしないで使用できる)
Java static初期化ブロックと初期化ブロック
Java インポートとstaticインポートのサンプル(import)