我有一项基本任务要做,但我对 OOP 还很陌生,并且正在努力解决它。其他在线资源开始增加我的困惑。
我必须:
为类 Person 编写代码。 Person 对象具有属性名称、年龄和地址。
为 Dog 类编写代码。 Dog 对象具有名称和年龄属性。
在 Person 和 Dog 类中提供在 Person 对象和 Dog 对象之间建立双向关联所需的任何附加代码。 Person 对象充当 Dog 对象的所有者,而 Dog 对象充当 Person 对象的宠物。
修改您的 Person 类,使一个 Person 对象可以充当最多 20 个 Dog 对象的所有者。
显然这是一个非常简单的例子。
到目前为止我的代码:
人员类别:
public class Person
{
// instance variables - replace the example below with your own
private String name;
private int age;
private String address;
/**
* Constructor for objects of class Person
*/
public Person()
{
this.name = name;
this.age = age;
this.address = address;
}
//Set Methods:
public void setName () {
this.name = name;
}
public void setAge () {
this.age = age;
}
public void setAddress () {
this.address = address;
}
//Get Methods:
public String getName () {
return name;
}
public int getAge () {
return age;
}
public String getAddress () {
return address;
}
}
狗类:
public class Dog
{
// instance variables - replace the example below with your own
private String name;
private int age;
public Dog()
{
this.name = name;
this.age = age;
}
//Set Methods:
public void setName () {
this.name = name;
}
public void setAge () {
this.age = age;
}
//Get Methods:
public String getName () {
return name;
}
public int getAge () {
return age;
}
}
主要内容:
public class Main
{
//Blank
}
我知道此代码目前无用且不会执行任何操作,但我不确定如何“关联”对象以及在何处执行此操作。分配规范指定一个人作为狗的“主人”。
这就是我的问题所在。设置对象之间的关系。
最佳答案
这里的主要问题是一致性:如果狗 d1 是人 p1 的宠物,那么 p1 必须是 d1 的所有者,反之亦然。如果像许多人建议的那样,我们有 2 个方法(Person.addDog()
和 Dog.setOwner()
),那么用户很容易犯错误而无法调用两种方法(或使用错误的参数调用)。由于一只狗只能有一个主人,一个简单而安全的接口(interface)将使用单一方法Dog.setOwner(Person p)
,如果我们想要狗没有主人。此方法除了设置字段 Dog.owner
外,还必须将这只狗从以前主人的宠物列表中删除,并且(如果 p != null)将自己添加到新主人的宠物列表中。 Person
类添加和删除宠物的方法应该对 Dog
类可见但对用户不可见(它们应该是包私有(private)的),而方法 Dog.setOwner
应该是公开的。
UPDT
我们可以将 Dog.owner
的值视为主要数据,将 Person.dogs
的值视为次要数据,类似于数据库索引。
关于java - 如何在 OO Java 中建立两个对象之间的双向关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20097945/