我发现自己处于一个狭窄的位置。 我正在一个罐子里给我的现有项目建立一些逻辑。因此我没有修改这些类的能力。将基类的对象转换为派生类
我想写一个额外的方法到现有的类,使其功能丰富。这些方法可以在少量实例数据上运行,也可以使用一些现有的实例方法。
但,因为类不能直接修改我写这些额外的方法在其新的派生类。考虑下面的例子
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