Java finalのサンプル(定数として使用/継承不可)

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クラスをサブクラス化できません」

Java クラスの継承の仕組みとサンプル

 

メソッドのオーバーライドを不可にする(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 オーバーライドのサンプル

関連の記事

Java staticメソッド/変数 (newしないで使用できる)
Java static初期化ブロックと初期化ブロック
Java インポートとstaticインポートのサンプル(import)

△上に戻る