将基类的对象转换为派生类

时间:2014-09-25 19:08:30

标签: java inheritance casting object-oriented-analysis downcast

我发现自己处于紧张状态。 我正在一个罐子里给我的现有项目之上构建一些逻辑。因此,我没有能力修改这些课程。

我想为现有的类编写其他方法,以使其功能丰富。这些方法可以在很少的实例数据上运行,也可以使用一些现有的实例方法。

因为该类无法直接修改,所以我在其新派生类中编写这些附加方法。请考虑以下示例

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。我知道我在沮丧。 有没有办法可以将基类对象强制转换为派生类的对象?

如果是,那么一个人可以向下倾斜的合法场景是什么?

如果没有,那么应该如何解决上述问题呢? 。我应该改变设计

感谢您的意见/建议!!!

1 个答案:

答案 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?