English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Java 基礎教程

Java プロセス制御

Java 配列

Java 面向オブジェクト(I)

Java 面向オブジェクト(II)

Java 面向オブジェクト(III)

Java 異常処理

Java リスト(リスト)

Java キュー(キュー)

Java Mapコレクション

Java Setコレクション

Java 入出力(I/O)

Java Reader/Writer

Javaの他のトピック

Java finalキーワード

このチュートリアルでは、Javaのfinal変数、finalメソッド、finalクラスについてサンプルを通じて学びます。

Javaでfinalキーワードは常量を表します。変数、メソッド、クラスと一緒に使用できます。

実体(変数、メソッド、クラス)がfinalと宣言されると、一度しか割り当てられません。つまり、

  • final変数は他の値で再初期化できません

  • finalメソッドはオーバーライドできません

  • finalクラスは継承できません

1. Java final変数

Javaで、final変数の値は変更できません。例えば、

class Main {
  public static void main(String[] args) {
    //final変数の作成
    final int AGE = 32;
    //final変数の変更を試みました
    AGE = 45;
    System.out.println("Age: "} + AGE);
  }
}

上記のプログラムでは、ageという名前のfinal変数を作成し、final変数の値を変更しようとしました。

プログラムを実行するときに、以下のエラーメッセージが表示され、コンパイルエラーが発生します。

final変数AGEに値を割り当てることができません
    AGE = 45;
    ^

注意:Javaでfinal変数を宣言する際には大文字形式を使用することをお勧めします。

2. Java finalメソッド

finalメソッドやfinalクラスについて理解する前に、まず以下を確認してくださいJava 继承.

Javaで、finalメソッドは子クラスでオーバーライドできません。例えば、

class FinalDemo {
    //finalメソッドの作成
    public final void display() {
      System.out.println("これはFinalメソッドです。");
    }
}
class Main extends FinalDemo {
  //finalメソッドをオーバーライドしようとしました
  public final void display() {
    System.out.println("Finalメソッドがオーバーライドされました。");
  }
  public static void main(String[] args) {
    Main obj = new Main();
    obj.display();
  }
}

上記の例では、FinalDemoクラス内にdisplay()と名付けられたfinalメソッドを作成しました。ここでは、MainクラスがFinalDemoクラスを継承しています。

Mainクラスのfinalメソッドをオーバーライドしようとしました。プログラムを実行すると、以下のようなエラーメッセージが表示され、コンパイルエラーが発生します。

 Mainのdisplay()はFinalDemoのdisplay()をオーバーライドできません
  public final void display() {
                    ^
  オーバーライドされたメソッドはfinalです

3. Java finalクラス

Javaで、finalクラスは他のクラスに継承されません。例えば、

final class FinalClass {
    //finalメソッドの作成
    public void display() {
      System.out.println("これはfinalメソッドです。");
    }
}
class Main extends FinalClass {
  //finalメソッドをオーバーライドしようとしました
  public  void display() {
    System.out.println("重写final方法");
  }
  public static void main(String[] args) {
    Main obj = new Main();
    obj.display();
  }
}

上記の例では、FinalClassという名前のfinalクラスを作成しました。ここで、Mainクラスがfinalクラスを継承しようと試みています。

プログラムを実行するときに、以下のエラーメッセージが表示され、コンパイルエラーが発生します。

cannot inherit from final FinalClass
class Main extends FinalClass {
                   ^