Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaのmain()メソッドはfinalとして宣言できる?

はい、Javaではmain()メソッドfinalとして宣言することができます。この場合もコンパイラはエラーをスローせず、正常に動作します。

finalメソッドとは

  • メソッドにfinalキーワードを付けて宣言すると、そのメソッドはfinalメソッドになります。
  • Javaにおいてfinalメソッドの最大の特徴は、オーバーライドできないという点です。
  • そのため、finalメソッドはサブクラスでオーバーライドできません
  • 継承を使用する際に、特定のメソッドをサブクラスで変更されたくない場合は、そのメソッドをfinalにすることで、サブクラスによるオーバーライドを防ぐことができます。
  • なお、サブクラスからfinalメソッドを呼び出す(アクセスする)こと自体は可能ですが、オーバーライドすることはできません。

コード例

class BaseClass {
    public final void show(Object o) {
        System.out.println("BaseClass method");
    }
}
class DerivedClass extends BaseClass {
    public void show(Integer i) {
        System.out.println("DerivedClass method");
    }
}
public class Test {
    // main()メソッドをfinalキーワード付きで宣言
    public static final void main(String[] args) {
        BaseClass b = new BaseClass();
        DerivedClass d = new DerivedClass();
        b.show(new Integer(0));
        d.show(new Integer(0));
    }
}

実行結果

BaseClass method
DerivedClass method

解説

上記の例では、main()メソッドにstaticfinalの両方を指定しています。プログラムは問題なくコンパイル・実行されます。

BaseClassshow(Object o)メソッドはfinalとして宣言されているため、サブクラスであるDerivedClassからオーバーライドされることはありません。DerivedClassshow(Integer i)は、引数の型が異なるためオーバーロードであり、オーバーライドではない点にも注意してください。それぞれのメソッドが独立して呼び出され、期待どおりの出力が得られます。

  1. JavaのSwingUtilities.invokeLater()メソッドの使い方を徹底解説

    invokeLater()メソッドとはinvokeLater()メソッドは、SwingUtilitiesクラスが提供するstaticメソッドの一つで、AWTイベントディスパッチスレッド(Event Dispatch Thread)上でタスクを非同期に実行するために使用されます。このメソッドはSwingUtilities.invokeAndWait()とよく似た動作をしますが、大きな違いは、処理のリクエストをイベントキューに登録した後、すぐに呼び出し元へ制御を返すという点です。つまり、invokeLater()は引数で渡されたRunnableオブジェクト内のコードブロックの実行完了を待ちません。

  2. JavaでJPanelのpaintComponent()メソッドを実装する方法をわかりやすく解説

    JPanelはJavaにおける軽量コンテナであり、それ自体は不可視(インビジブル)なコンポーネントとして扱われます。デフォルトのレイアウトにはFlowLayoutが採用されています。JPanelを生成した後は、Containerクラスから継承されたadd()メソッドを呼び出すことで、ボタンやラベルなどの他のコンポーネントをJPanelオブジェクトに自由に追加できます。 paintComponent()メソッドとは このメソッドは、単なる背景色の描画にとどまらず、JPanel上に独自の図形や画像などを描画したい場合に必要となります。paintComponent()メソッドはすでにJPanelクラ