簡體   English   中英

子實例從父類實例化

[英]Child Instantiate from parent class

可以從沒有子類名的父類實例化子對象。

例如,我有下一個課程:

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()方法來創建一個類子實例。

PS:

我只需要初始化子類對象,但是有大量的子類,我不會為所有這些類調用“new”,我也不會編寫靜態方法來初始化它,同樣,所有的子節點都有相同的構造函數。 我無法從父母創建子實例是一個很大的缺點。

當您編寫A a = A1.getObject() ,您確實使用子類名(A1)。 那么a)你的問題是誤導性的,b)為什么你不能寫A a = new A1()

如果要編寫A1.getObject() ,則可以在類A1中重新定義getObject()

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

}

如果沒有重新定義,就無法在類A中聲明getObject() ,以便它返回不同類的對象,因為A a = A1.getObject()將編譯為A a = A.getObject()

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
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM