0

子クラス名なしで親クラスから子オブジェクトをインスタンス化することは可能です。

たとえば、次のクラスがあります。

public class A {
   protected int a;

   public A1() {
       a = 0;
   }

   public int getA() {
       return a;
   }

   public static A getObject() {
       // some code which I need to write
   }
}

public class A1 extends A {
    public A1() {
        a = 5;
    }
}

public class A2 extends A {
    public A2() {
        a = 10;
    }
}

使用例:

A a = A1.getObject();
a.getA(); // return 5

a = A2.getObject();
a.getA(); // return 10

a = A.getObject();
a.getA(); // return 0

A1、A2すべての子クラスではありません。無制限の数があるかもしれません。

getObject() メソッドを書き込んで、A クラスの子インスタンスを作成するにはどうすればよいですか。

PS:

子クラスオブジェクトを初期化するだけで済みますが、大量の子クラスがあり、それらすべてに対して「new」を呼び出すことはありません。また、静的メソッドを記述して初期化することもありません。また、すべての子には同じコンストラクターがあります。親から子インスタンスを作成できないのは大きな欠点です。

4

2 に答える 2

2

を書くときはA a = A1.getObject()、子クラス名(A1)を使用します。それで、a)あなたの質問は誤解を招きますそしてb)なぜあなたはただ書くことができないのですA a = new A1()か?

を書きたい場合は、クラスA1でA1.getObject()再定義できます。getObject()

public class A1 extends A {
   public static A getObject() {
     return new A1();
   }

}

再定義しないと、クラスAで宣言getObject()して、オブジェクトに異なるクラスを返すようにする方法はありません。これA a = A1.getObject()は、にコンパイルされるためA a = A.getObject()です。

于 2012-06-05T07:04:15.300 に答える
0
class A
{
   protected int a;

   public A()
   {
       a = 0;
   }

   public int getA()
   {
       return a;
   }

   public static A getObject(Class c) throws Exception
   {
        A obj = (A)c.newInstance();
    return obj;     
   }
}

class A1 extends A
{
    public A1()
    {
        a = 5;
    }
}

class A2 extends A
{
    public A2()
    {
        a = 10;
    }
}
class Test{
    public static void main(String args[]) throws Exception
    {
        A a = A1.getObject(A1.class);
        System.out.println(a.getA()); // return 5

        a = A2.getObject(A2.class);
        System.out.println(a.getA()); // return 10

        a = A.getObject(A.class);
        System.out.println(a.getA()); // return 0
    }
}
于 2012-06-05T07:03:45.353 に答える