比方說,我有一個類Child
它擴展另一個類,Parent
:在Java中,我可以創建「基於」超類實例的子類實例嗎?
public class Parent {
private String value;
public Parent() { }
public String getValue() { return this.value; }
public void setValue(String value) { this.value = value; }
}
public class Child extends Parent {
private String anotherValue;
public Child() { super(); }
public String getAnotherValue() { return this.anotherValue; }
public void setAnotherValue() { this.anotherValue = anotherValue; }
}
現在,對於類Parent
的任何實例parent
,並希望構建類的實例child
Child
使得物體child
延伸對象parent
,即在這種情況下,child.getValue().equals(parent.getValue())
。要做到這一點
的方法之一,是一個構造函數添加到Child
如下:
public Child(Parent parent) {
this.setValue(parent.getValue());
}
這做工作,但它可以挑剔的,如果超類是更復雜的,更重要的是,超類隨着時間的推移而演變,這個構造函數應該不斷地更新,這可以被遺忘,或多或少造成災難性的影響。
它也可以用反射來完成,這可能是一種矯枉過正。
所以我不知道是否有任何Java本地方式來做到這一點:創建一個子類的實例,並複製超類的實例的所有屬性。這是一種與鑄造相反的方式。
本身,我會反思這樣做。在一個真實的項目中,我會使用推土機(實際上是通過反射來實現的,但是比自己做的更好) –
您的用例是什麼? – ControlAltDel
很難知道爲什麼你需要這個,但也許你可以使用上限通配符?例如,如果您有一個方法需要列表,並且您想要將其更改爲也取得子列表,則可以將該參數重寫爲List <?繼承Parent>。 https://docs.oracle.com/javase/tutorial/java/generics/upperBounded.html –
Dziugas