0

アイテムのツリーを表示するために、自分自身を参照するクラスを作成しました。

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を使用する方法について誰かにヒントを教えてもらえますか。ObjectCTreeBigからObjectCTreeを取得するには、少なくとも必要です。

もちろん、これを手動でコーディングすることもできますが、実際には私のクラスはもっと複雑で、2つのクラスCTreeだけでなく、おそらく4つまたは5つのクラスがあります...

前もって感謝します

ジオ

4

1 に答える 1

0

継承とポリモーフィズムを誤用または誤解しています。CGroupOfItems[] getGroups() をオーバーライドする必要はありません。CGroupOfItemsBig に適した方法で実装するだけですが、CGroupOfItemsBig は CGroupOfItems であるため、戻り値の型は CGroupOfItems になります。しかし、ここには言語を理解するというより深い問題があるのではないかと思います。おそらくこれが役立ちます:http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html

于 2012-07-30T15:58:08.177 に答える