0

私はJavaが初めてで、関連付けに苦労しています。クラスがあります

public class A{
  private string name;

  public string get_name() {
    return name;
  }

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

として別のクラス B との関連付けがありassociation A -> Bます。1 対 1 の関連付けです。今私がしたいのCは、タイプの別のクラスを作成することclass Aです。つまり、C は A と同じクラスですが、名前が異なります。しかし、A と C の間には 1 対多の関係があります。

4

3 に答える 3

2

C 別の名前の場合A、のインスタンスを初期化して名前を付けないのはなぜAですかC?

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

または、時間の経過とともに変化するが、 make extendCに依存する場合ACA

public class C extends A{

}

ただし、スーパークラスを具象化するのは一般的に悪い考えであるため、上記を使用することには注意が必要です(Aが変更され、Cにそれらの変更を継承させたくない場合はどうなりますか?)。ということAで、インターフェース/抽象クラスを作って両方作ってC実装Aconcrete

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

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{

}
于 2012-04-28T15:50:39.397 に答える
1

私があなたの質問を正しく理解したなら、これはあなたが望むものです:

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;
  }
}

myCsクラスにコレクションを含めることAは、1対多の関係です。Cと同じパラメータを持つ場合は、追加のクラスは必要ありませんA

ちなみに、コードのセッターにはバグがあります。上記で修正しました。

于 2012-04-28T15:51:20.950 に答える
0

2 番目のクラスは必要ありません。2 番目 (および 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);
  }
}

(簡体字)

コンパイラは、その時点で準備ができていない定義を使用するようなクラスを構築することに問題はありません。

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

于 2012-04-28T15:56:12.763 に答える