10

新しいJFrameを作成するのではなく、JFrameを拡張することの長所と短所は何ですか?

例えば:

public class Test extends JFrame {

setVisible(true);

}

また

public class Test {

JFrame test = new JFrame():

test.setVisible(true);

}
4

4 に答える 4

11

クラスの機能を実際に拡張したい場合を除いて、クラスを拡張しないでください。ここで示した例では、オプション1は機能の乱用であるため、オプション2を使用する必要がありますextend

言い換えれば、質問への答えがテストである限りJFrameNOです。拡張しないでくださいJFrame

于 2012-05-04T04:22:31.047 に答える
9

JFrame(またはそのことについてはSwingコンポーネント)を拡張しないことの長所:

  • 意図しないメソッドのオーバーライドは避けてください。私はこれに何度か足を踏み入れました。最初はクラスint getX()int getY()メソッドを与えたときです。試してみると、それほど面白くない異常な動作が見られます。
  • EclipseまたはNetBeansを使用するときに使用できるメソッドオプションを、作成したメソッドのみに簡略化します。これは実際に私のお気に入りの利点です。
  • GUIを調整してJFrameではなくJPanelsを作成すると、デプロイメントの柔軟性が100倍向上します。
  • そして最も重要なのは、公開が必要なものだけを公開することです。
于 2012-05-04T04:24:17.767 に答える
2

JFrame を拡張する場合は、現在の Jframe クラスを変更/カスタマイズして、サブクラスがこのカスタマイズされた実装を使用できるようにします。

JFrame クラスで何も変更したくない場合は、コードで指定した 2 番目のスニペットのように既存のものを使用してください。使用とは、JPanel で他の JComponent (例のボタン/ラベル) などを作成し、オブジェクト Test を作成し、JFrame contentPane をこのオブジェクトに設定することを意味します。何かのようなもの

public class Test extends JPanel {

   public class() {
    // add buttons/label here
   }
   ...

   private static void createAndShowGUI() {
       JFrame frame = new JFrame();

       Test object = new Test();
       frame.setContentPane(object.setOpaque(true));

       frame.setVisible(true);
   }
...
}
于 2012-05-04T04:33:40.417 に答える
0

OOD のルールの 1 つ: クラスを継承 (拡張) できない場合は、クラスを継承しません。

継承により、プログラムの複雑さと接続性が増し、新しいエラーが発生する可能性があります。あなたの場合、クラスを延長する理由はありません。

保護されたメンバーにアクセスする必要がある場合、および/またはポリモーフィックな動作を取得する必要がある場合 (仮想メソッドをオーバーライドする場合) にのみ、クラスを拡張する必要があります。

于 2012-05-04T04:31:01.123 に答える