3

私はそこにいます

私はこのシナリオを持っています:

public class A{
  //attributes and methods
}

public class B{
  //attributes and methods

}

public class C{
  private B b;
  //other attributes and methods
}

public class D{
  private C c1, c2, c3;
  private List<A> a;
  //other attributes and methods
}

すべてのクラスには独自のファイルがあります。ただし、クラスA、B、およびCは、プログラム全体では使用しておらず、プログラムのごく一部で使用しているため、クラスDの内部クラスとして取得したいと思います。それらをどのように実装する必要がありますか?私はそれについて読みましたが、私はまだ最良の選択肢が何であるかについて確信がありません:

オプション1、静的クラスの使用:

public class D{
  static class A{
    //attributes and methods
  }

  static class B{
    //attributes and methods
  }

  static class C{
    private B b;
    //other attributes and methods
  }

  private C c1, c2, c3;
  private List<A> a;
  //other attributes and methods
}

オプション2、インターフェースとそれを実装するクラスを使用します。

public interface D{
  class A{
    //attributes and methods
  }

  class B{
    //attributes and methods
  }

  class C{
    private B b;
    //other attributes and methods
  }

}

public class Dimpl implements D{
  private C c1, c2, c3;
  private List<A> a;
  //other attributes and methods
}

元のシナリオを使用して同じ動作を実現するには、どちらのアプローチが優れているかを知りたいです。オプション1を使用して、このようなクラスを使用しても大丈夫ですか?

public method(){
  List<D.A> list_A = new ArrayList<D.A>();
  D.B obj_B = new D.B();
  D.C obj_C1 = new D.C(obj_B);
  D.C obj_C2 = new D.C(obj_B);
  D.C obj_C3 = new D.C(obj_B);

  D obj_D = new D(obj_C1, obj_C2, obj_C3, list_A);
}

基本的に、私の懸念は、内部クラスの作成が外部クラスにどのように影響するかです。元のシナリオでは、最初にクラスA、B、Cのインスタンスを作成し、次にクラスDのインスタンスを作成します。前述のオプションで同じことを実行できますか?

4

2 に答える 2

6

インターフェイスはアクセスを目的としているため、クラス内でのみ使用する場合は、インターフェイスを使用する理由はありませんpublic。最初のアプローチを使用します(そしてクラスをプライベート静的にします)

于 2012-05-16T17:20:06.377 に答える
0

内部クラスには2つのタイプがあります。

  1. 静的内部クラス(トップレベルクラスとして知られています)

  2. インナークラス

静的内部クラスの例:

   public class A {

                static int x = 5;

                int y = 10;


                static class B {

              A a = new A();       // Needed to access the non static Outer class data

              System.out.println(a.y);

              System.out.println(x); // No object of outer class is needed to access static memeber of the Outer class

    }

}

内部クラスの例:

            public class A {

                      int x = 10;

                    public class B{

                      int x = 5;

               System.out.println(this.x);
               System.out.println(A.this.x);  // Inner classes have implicit reference to the outer class

              }
          }

内部クラス(静的内部クラスではない)のオブジェクトを外部から作成するには、最初に外部クラスobjecを作成する必要があります。

A a = new A();

AB b = a.new B();

于 2012-05-16T18:16:38.223 に答える