java - 如何在 OO Java 中建立两个对象之间的双向关联

标签 java class oop object

我有一项基本任务要做,但我对 OOP 还很陌生,并且正在努力解决它。其他在线资源开始增加我的困惑。

我必须:

  1. 为类 Person 编写代码。 Person 对象具有属性名称、年龄和地址。

  2. 为 Dog 类编写代码。 Dog 对象具有名称和年龄属性。

  3. 在 Person 和 Dog 类中提供在 Person 对象和 Dog 对象之间建立双向关联所需的任何附加代码。 Person 对象充当 Dog 对象的所有者,而 Dog 对象充当 Person 对象的宠物。

  4. 修改您的 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/

相关文章:

oop - 提供对事件处理程序中实例的访问

C++ 成员函数使用另一个成员函数

PHPStorm - 找不到内部对象的方法

java - 防止客户端/服务器应用程序上的数据篡改

java - clsStr 变量是 "clsStr = (*env)->NewGlobalRef(env,cls)"的全局变量是什么?

java - 无法在 setTypeFilter() 中使用两个 typeFilters 进行 Google 地方信息 2019 更新

java - java中可以通过反射设置字段的 transient 属性/标志吗?

java - Java 的 "Class.forName"是否扫描所有 jar 中的所有类名?

php - 无法将命名空间路径评估为变量

java - 在 Java 中使用同名包中的类