Javaのfinalのサンプルです。
目次
サンプル | staticとfinalを使用して定数にする |
クラスの継承を不可にする(final) | |
メソッドのオーバーライドを不可にする(final) |
staticとfinalを使用して定数にする
static final 変数の型 変数名 |
- staticとfinalを変数の前につけて定数として使用します。
- 変数の前にfinalをつけると変数に対して再代入が不可になります。定数と呼びます。
→staticは、クラスをインスタンス化せずに変数を使用できます。 - 定数名は、変数と区別が付くようにするため、大文字にします。単語で区切りがある場合はアンダスコア(_)をつけます。
- finalは「最後の」という意味です。
定数のサンプルです。
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をつけるとクラスの継承が不可になります。
Java クラスの継承の仕組みとサンプル
クラスの前に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をつけるとオーバーライドが不可になります。
Java オーバーライドのサンプル
メソッドの前に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)