有一個我不能控制的類Gold。它有一個工廠方法:用工廠方法創建子類對象
public static Gold TransmuteFromLead(Lead someLead);
我現在繼承金,使我自己的類GoldWatch。我有一個Lead對象。有沒有辦法在GoldWatch中編寫TransmuteFromLead方法,該方法以某種方式使用Gold的TransmuteFromLead方法但創建了GoldWatch對象?
對於類似但不完全相同的問題,請參閱What's the correct alternative to static method inheritance?但是我的情況不同,因爲我不控制基類。
如果您在GoldWatch上有GoldWatch CreateWatch(Gold someGold)方法,您可以創建黃金然後創建手錶。我想不出直接創建它的好方法。 – Maess
雖然偶爾可能會很方便,但沒有簡單的方法。您必須手動創建「Lead」或「Gold」的轉換。如果你還需要複製一些私人領域,這可能是不可能的(以一種乾淨的方式)。核心問題是,儘管一些數據在'Gold'和'GoldWatch'之間共享,但最終它們是兩個不同的對象。像他們的內存組織這樣的事情是JIT編譯器的實現細節,所以實際上沒有任何事情可以通過。如果你真的需要這樣做,你可能不得不使用反射,它仍然是棘手的。 – Luaan