2

私はプログラミングの初心者であり、Java の初心者です。私はこの秋にコンピューター サイエンスのコースを開始する前に独学で勉強していて、2 人の異なる著者から見た構文に興味があります。ある本では、JFrame は通常、クラスを JFrame の拡張にすることによって確立されます。

public class MyClass extends JFrame {

ただし、別の著者、およびこのサイトでの質問は、通常、クラス内のフレームを次のように確立します。

public class MyClass {
JFrame frame = new JFrame();

まず、一方が他方よりも優れている点は何ですか? 私には専門家ではありませんが、クラスを JFrame の拡張として作成すると、フレームのパラメーターを設定したり、フレームにコンポーネントを追加したりすることが容易になるように思えます。

拡張形式のIE、あなたは単に言う

add(component);

ただし、他の形式では、次のように入力する必要があります。

frame.getContentPane().add(component);

これはもっと退屈に思えます。

誰かがこれの背後にある理由を簡潔に説明できますか、それとも単に好みの問題なのか. 私はこれを調べましたが、簡単な答えを得ることができませんでした。

4

2 に答える 2

5

多くの人(私を含む)が後者を好む哲学的および実際的な理由があります。

  • 一般に、継承よりも構成を優先します。
  • クラスの固有の動作を変更する (つまり、1 つまたは複数のメソッドをオーバーライドする) 予定がある場合にのみ、クラスを拡張します。
  • JFrame を拡張しないことで、結合を最大化し、結合を最小化するクラスを作成し、クリーンな MVC ベースのコードを記述することが容易になります。この概念のより重要な例は、GUI コード (ビューコード) にリスナー インターフェイス (制御コード) を実装させないようにすることです。赤ちゃんのプログラムには問題ありませんが、複雑になる可能性がある大人のコードには適していません。
  • JFrame などの大規模で複雑なクラスを拡張しないことで、隠しオーバーライドの不正な動作をデバッグするのが困難になるリスクを軽減できます。JFrame または JPanel を拡張し、クラスにgetX()andgetY()メソッドを与えて、私が何を意味するかを確認してください!
  • クラスのオブジェクトで使用できるメソッドを提案する IDE を使用している場合、JFrame などの巨大で複雑なクラスをオーバーライドしないと、提案される可能性のあるメソッドの数 (および複雑さ) が大幅に削減されます。
  • JFrame をオーバーライドするのではなく、JPanel を作成するように Swing GUI を調整することで、その GUI の使用方法の柔軟性が大幅に向上します。今では、より複雑な GUI の一部として、または CardLayout ビュー スワップの一部として、JDialog、JOptionPane、JApplet、別の JPanel 内に配置できます。
  • 上記と同じように、私の GUI の多くは JPanel を作成します。これは、アプリケーション全体に追加する前に小さなテスト プログラムの JFrames に配置することで分離してテストできます。
于 2013-07-20T18:24:16.980 に答える
3

従来、特別なタイプのフレームを作成していないため、JFrame を拡張しないでください。

JFrame を作成してコンテンツを配置しているので、後者の方法が望ましいです。

つまり、オブジェクト指向の観点からすると、JFrame を拡張するのではなく、JFrame を使用する方がクリーンです。

于 2013-07-20T18:22:39.823 に答える