Javaのfinalキーワード完全解説:変数、メソッド、クラスでの活用法
Java finalキーワード
Javaのfinalキーワードが、定数の保護、メソッドのオーバーライド防止、クラスの継承阻止にどう機能するか、明確な例で解説します。
Javaにおいて、finalキーワードは、変数、メソッド、クラスといったエンティティが初期定義後に変更できないことを示します。この不変の契約はコンパイル時に強制され、プログラムの振る舞いに関する保証を提供します。
- Final変数は再代入できません。
- Finalメソッドはサブクラスでオーバーライドできません。
- Finalクラスは拡張できません。
1. Final変数
変数をfinalで宣言すると、最初の代入後に値が固定されます。これはJavaで定数を定義する標準的な方法です。
class Main { public static void main(String[] args) { // final変数を宣言 final int AGE = 32; // 以下の行はコンパイルエラーになる // AGE = 45; System.out.println("Age: " + AGE); } }
コンパイラはAGEへの再代入を試みるコードのコンパイルを拒否し、以下のようなエラーを出します:
cannot assign a value to final variable AGE AGE = 45; ^
ヒント: 慣例として、定数名はアンダースコア区切りの全大文字(例:MAX_SIZE)で記述し、不変性を示します。
2. Finalメソッド
FinalメソッドはJavaの継承におけるセーフティネットの一部です。メソッドをfinalでマークすると、サブクラスでオーバーライドできなくなり、元の実装が保持されます。
class FinalDemo { // Finalメソッド public final void display() { System.out.println("This is a final method."); } } class Main extends FinalDemo { // オーバーライドを試みる - コンパイルエラーになる public final void display() { System.out.println("The final method is overridden."); } public static void main(String[] args) { Main obj = new Main(); obj.display(); } }
display()メソッドのオーバーライドを試みると、以下のようなエラーが発生します:
display() in Main cannot override display() in FinalDemo public final void display() { ^ overridden method is final
3. Finalクラス
finalクラスはサブクラス化できません。これはセキュリティクリティカルな型や不変型によく使用され、クラスの振る舞いが変更されないことを保証します。
// Finalクラスの定義 final class FinalClass { public void display() { System.out.println("This is a final class."); } } // Finalクラスの継承を試みる class Main extends FinalClass { public void display() { System.out.println("The final class is overridden."); } public static void main(String[] args) { Main obj = new Main(); obj.display(); } }
コンパイラはこの継承を以下のエラーで拒否します:
cannot inherit from final FinalClass class Main extends FinalClass { ^
Java
- C# static キーワード:静的変数、メソッド、クラスをマスターする
- Java instanceof演算子完全ガイド:基本から継承・インターフェースまで
- Java継承のマスター:概念、種類、実践例
- Java Staticネストクラスの理解:用法、違い、実例
- Java無名インナークラス完全ガイド:定義、構文、実践例
- Javaシングルトンパターン完全解説:安全な実装と活用法
- Javaリフレクション完全ガイド:実行時のクラス・メソッド・フィールド検査
- Java ArrayList完全マスター:操作・メソッド・ベストプラクティス
- Java ObjectOutputStream完全ガイド:シリアル化、メソッド、実践例
- Javaジェネリクス完全ガイド:再利用可能で型安全なコードの構築
- Javaファイル操作のマスター:java.ioによる作成・読み取り・書き込み・削除