如何派生(扩展)递归连接类(树)

时间:2012-07-30 15:08:09

标签: java derived-class

要显示项目树,我编写了引用自己的类:

CTree
{
    String name;
    CGroupOfItems[] groups

    CGroupOfItems[] getGroups();
    //... and more getter and setter methods
}

CGroupOfItems
{
    String name;
    CItem[] items;

    CItems[] getItems();
    //... and more getter and setter methods
}


CItem
{
    String name;
    CItem[] childItems;

    CItems[] getChildItems();
    //... and more getter and setter methods
}

有了这个我管理的树木如下:

tree
 -group 1
   - item 1.1
     - item 1.1.1
       - item 1.1.1.1
     - item 1.1.2
   - item 1.2
 - group 2
  - item 2.1
.....

现在,对于其他一些功能,我想管理其成员提供更多数据的树:

CTreeBig
{
    String name;
    int id;
    String additionalData;
    CGroupOfItemsBig[] groups

    CGroupOfItemsBig[] getGroups();
    //... and more getter and setter methods
}


CGroupOfItemsBig
{
    String name;
    int id;
    String additionalData;
    CItemBig[] items;

    CItemBig[] getItems();
    //... and more getter and setter methods
}


CItemBig
{
    String name;
    int id;
    String additionalData;
    CItemBig[] childItems;

    CItemBig[] getChildItems();
    //... and more getter and setter methods
}

现在我想从CTree扩展CTreeBig。 但这是不可能的,因为我无法覆盖

CGroupOfItems[] getGroups();

使用:

CGroupOfItemsBig[] getGroups();

任何人都可以告诉我如何使用Java-Extension来解决这个问题。 至少需要从Object CTreeBig获取Object CTree。

当然我可以手动编写代码,但实际上我的课程更复杂,我不仅会有两个类CTree,而且可能是4或5 ......

提前致谢

吉奥

1 个答案:

答案 0 :(得分:0)

您滥用或误解了继承和多态性。无需重写CGroupOfItems [] getGroups()。您只需以适合CGroupOfItemsBig的方式实现它,但返回类型是CGroupOfItems,因为CGroupOfItemsBig“是一个”CGroupOfItems。但我怀疑在这里理解语言还有一个更深层次的问题。也许这会有所帮助:http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html