質問: JAVA及びJAVAFXを勉強・練習している者です。説明が下手ですいませんが、 1.JAVAFXはApplicationクラスをベースとする新しいクラスとして作成されますがなぜJAVAFXはそうすること前提に作られているんですか? 2.Applicationクラスを拡張継承したクラスとして定義したオリジナルクラスにはstart()というメソッドが記述されますが、なぜApplicationクラスがそうすることを前提に設計されているのでしょうか? よろしくお願いします。
回答: 一つの解釈ですが・・・ 「なにか決まりきったことをする」のに一々それをプログラマーが書かなくてはならない設計より「決まりきったことは裏方でやってくれてプログラマーは興味のある仕事のみに集中できるようにする」という設計上の考え方があります。 単なる例ですがJavaFXアプリケーションではmainメソッドを省略してもよく、その際にはランタイムがApplicationクラスの派生クラスを探し出してくれて、JavaFXの初期化などをやった上でそのApplicationクラスのstartメソッドを呼び出すという仕組みがあります。 またApplicationクラスのリファレンスのJavaFXのアプリケーションのライフサイクルの説明を見ると以下のようなことが書いてあります。 > > JavaFXアプリケーションのエントリ・ポイントはApplicationクラスです。アプリケーションが起動されると常に、JavaFXランタイムにより次のことがこの順序で実行されます。 > > 1. 指定されたApplicationクラスのインスタンスを構築します。 > > 2. init()メソッドを呼び出します。 > > 3. start(javafx.stage.Stage)メソッドを呼び出します。 > > 4. 次のいずれかが発生した場合、アプリケーションの完了を待機します。 > > アプリケーションによりPlatform.exit()が呼び出される場合 > > 最後のウィンドウが閉じられ、かつPlatformのimplicitExit属性がtrueである場合 > > 5. stop()メソッドを呼び出します。 > > > アプリケーションの初期化や終了処理を書きたい場合にinitやstopをオーバーライドできる仕組みになっていますが、一々そういうことをする必要がない場合は省略することもできるようにApplicationクラスの中のオーバーライド可能なメソッドとして用意されていると考えることができます。 このような考え方は「ライブラリー側が決まった処理をするためのテンプレートを提供し」「プログラマーは自分の目的にあった部分だけオーバーライドし、デフォルトでかまわないなら何も書かなくてよい」というよく見られる手法だと思います。