[英]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.