java类与自身的关联

时间:2012-04-28 15:45:21

标签: java associations

我是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。这是一对一的协会。现在我想做的是创建另一个类C的类class A。换句话说,C与A是同一个类,但名称不同。但是A和C之间存在1对多的关联。我将不胜感激任何帮助!

3 个答案:

答案 0 :(得分:2)

如果C A的名称不同,为什么不只是初始化A的实例并将其命名为C

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

或者,如果C会随着时间的推移发生变化,但依赖A生成C延长A

public class C extends A{

}

但是,我会谨慎地使用上面的内容作为一个通常不好的想法,使一个超类具体(如果A改变了行,你不希望C继承这些更改?)。因此,将A设为接口/抽象类,并使CAconcrete实现它。

以下情况会很好......

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{

}

答案 1 :(得分: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是您的一对多关联。如果C具有与A相同的参数,则不需要额外的课程{{1}}。

顺便说一下:代码中的setter有一个bug。我已经修好了它。

答案 2 :(得分: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);
  }
}

(简化的)

编译器在构造这样一个类时没有问题,该类使用当时尚未准备好的定义。

也许编译器的开发人员有。 :)