2012-04-28 19 views
0

私はJavaを使い慣れていないので、関連性に苦しんでいます。私はassociation A -> Bとして別のクラスBとの関連を有するクラス自分自身へのクラスのJavaの関連

public class A{ 
    private string name; 

    public string get_name() { 
    return name; 
    } 

    public void set_name(string name) { 
    name = name; 
    } 
} 

を有します。それは1対1の関連です。今私がしたいのはclass Aの別のクラスCを作成することです。つまり、CはAと同じクラスですが、名前は異なります。しかし、AとCの間には1対多の関係があります。私は助けていただければ幸いです!

+1

'C' **は' A'のインスタンスを初期化して 'C'という名前にするのはなぜですか? – Aidanc

+2

?あなたの質問はあまり意味がありません。 –

答えて

2

Cの場合は、ちょうどAのインスタンスを初期化し、Cという名前を付けていない理由を別の名前でAているのですか?

また
A c = new A(); 
c.set_name("Bob"); 

Cは、時間の経過とともに変化するが、Aに依存することになるだろうされている場合Cはしかし、私はへの、一般的に悪い考えとして上記を使用しての警戒だろうA

public class C extends A{ 

} 

を拡張しますスーパークラスを具体的にする(Aが行を変更し、Cがその変更を継承しないようにする場合はどうなるでしょうか?)したがって、Aをインタフェース/抽象クラスにして、CAconcreteの両方を実装します。

public class A{ 
    private Collection<A> myCs; 
    private string name; 

    public string get_name() { 
    return name; 
    } 

    public void set_name(string name) { 
    this.name = name; 
    } 
} 

AがあるクラスのコレクションmyCsを持つ:

次のようなものが良いでしょう...

abstract class A{ 
    protected String name; //Protected so that subclasses can call it 

    public String get_name() { 
    return name; 
    } 

    public void set_name(String name) { 
    this.name = name; 
    } 

} 

class C extends A{ 


} 

class Aconcrete extends A{ 

} 
+0

具体的なスーパークラスを避けるためのヒント。たぶん人々はそれを(まだ)よく理解していないでしょう。 –

1

私はあなたの質問を理解している場合は、右、これはあなたが望むものですあなたの1対多の関連付け。 Aと同じパラメータを使用する場合は、追加のクラスCは必要ありません。

ところであなたのコードのセッターにはバグがあります。私は上にそれを修正しました。

0

セカンドクラスは必要ありません。セカンドオブジェクト(さらに100個以上のオブジェクト)が必要な場合があります。

public class Node { 
    private List<Node> childs = new ArrayList <Node>(); 

    public boolean isLeaf() { 
    return childs.isEmpty(); 
    } 

    public void add (Child c) { 
    childs.add (c); 
    } 
} 

(簡略化)

コンパイラの準備ができていない定義を使用するようなクラスを構築する上で問題はない:一般的な場合は、ノードで構成ツリーのような再帰的なデータ構造であります当時。

多分、コンパイラの開発者が持っていたかもしれません。 :)

関連する問題