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

4

3 回答 3

2

如果C A不同的名称,为什么不初始化一个实例A并命名它C

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

或者,如果C会随着时间的推移而改变,但依赖于Amake CextendA

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{

}
于 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在课堂上拥有 CollectionA是您的一对多关联。如果C它具有与A.

顺便说一句:您代码中的设置器有一个错误。我已经在上面修复了。

于 2012-04-28T15:51:20.950 回答
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);
  }
}

(简化)

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

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

于 2012-04-28T15:56:12.763 回答