我发现自己处于紧张状态。 我正在一个罐子里给我的现有项目之上构建一些逻辑。因此,我没有能力修改这些课程。
我想为现有的类编写其他方法,以使其功能丰富。这些方法可以在很少的实例数据上运行,也可以使用一些现有的实例方法。
但因为该类无法直接修改,所以我在其新派生类中编写这些附加方法。请考虑以下示例
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
。我知道我在沮丧。 有没有办法可以将基类对象强制转换为派生类的对象?
如果是,那么一个人可以向下倾斜的合法场景是什么?
如果没有,那么应该如何解决上述问题呢? 。我应该改变设计
感谢您的意见/建议!!!
答案 0 :(得分:2)
您要做的事情违背了多态性和遗产的概念,您只能将子对象放入父对象,因为它们共享相同的基本属性,但您无法尝试将父级转换为其子级。
我建议创建一个"演员"在您的其他类中,您将获取子项中的所有重要内容,然后使用该数据创建父对象并返回它。
这样的事情:
public Parent downcast(Child c)
{
Parent cast = new Parent();
//Transfer data from the child to the parent
cast.setProperty(c.getProperty());
return cast;
}
可能有一个比这更好的解决方案,但它可以轻松解决您的问题。
这也可以帮到你,也许是重复的? :How to downcast a Java object?