我發現自己處於一個狹窄的位置。 我正在一個罐子裏給我的現有項目建立一些邏輯。因此我沒有修改這些類的能力。將基類的對象轉換爲派生類
我想寫一個額外的方法到現有的類,使其功能豐富。這些方法可以在少量實例數據上運行,也可以使用一些現有的實例方法。
但,因爲類不能直接修改我寫這些額外的方法在其新的派生類。考慮下面的例子
public class Parent
{
public void existing method()
{
}
}
public class Child extends Parent
{
public void newMethod()
{
}
}
public class Other
{
public Parent foo()
{
Parent pr = new Parent();
return pr;
}
}
public class Test
{
Other o = new Other();
Parent p = o.foo;
Child c = (Child) p;
c.newMethod();
}
當我運行這段代碼我得到一個ClassCastException
。我知道我很沮喪。 有沒有一種方法可以將基類的對象轉換爲派生類的對象?
如果是,那麼可以降級的合法方案是什麼?
如果不是那麼應該如何解決上述情況? 。我應該改變設計
感謝您的意見/建議!
當您調用newMethod()時,爲什麼不能在派生類上調用它?像新的Child()。newMethod()? – 2014-09-25 19:15:07
什麼阻止你在測試中直接創建一個子類?小孩c =新小孩()? – 2014-09-25 19:15:10
您應該在方法foo()中創建Child的一個實例。或者出於某些原因不可能? – 2014-09-25 19:18:06