我是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对多的关联。我将不胜感激任何帮助!
答案 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
设为接口/抽象类,并使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{
}
答案 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);
}
}
(简化的)
编译器在构造这样一个类时没有问题,该类使用当时尚未准备好的定义。
也许编译器的开发人员有。 :)