【问题标题】:Can we use extends with Has a relationship我们可以使用扩展和有关系吗
【发布时间】:2018-04-14 12:35:15
【问题描述】:

我们使用extends 关键字在Java 中使用OOP 来使用is-a relationship。但另一方面,我们也有has-a relationship,我们使用第二类中第一类的引用作为has-a relationship。我的问题是,如果我们有一个 has-a 关系,我们可以在实现中使用extends keyword 吗?

假设我们这里有例子:

一所“大学”有多个“系”。在不存在的情况下 “大学”,没有“系”存在的机会。

我们可以写成(只是一个粗略的例子,便于理解)

class University extends Department
{
   Department d = new Department();
   University(String name, Department d)
    {
        this.Name=name;
        this.Department = d;    
    }    
}

或者当我们在另一个类中创建一个实体时,我们不能使用单词extends

【问题讨论】:

  • 我想你可以,但这就是工具的用途。
  • 你的设计可以编译,所以它是可能的。但是为什么需要从Department扩展。没有它,该类也可以工作。
  • 我只是在想,Java 中的这个“扩展”关键字仅适用于“是关系”或任何类型的继承,包括有关系

标签: java oop


【解决方案1】:

你不能使用extends,但你可以使用interface,如下:

interface HasDepartments {
    public Set<Departments> getDepartments();
}

class University implements HasDepartments {
    private final String name;
    private final Set<Department> departments = new HashSet<Department>();
    University(String name, Collection<Department departments) {
        this.name=name;
        this.departments = departments;    
    }
    public Set<Departments> getDepartments() {
        return departments;
    }
 }

但是,除非有其他可以有部门的事情,否则我不会打扰。只需 University 有一个 getDepartments() 方法就足够了。

【讨论】:

  • 感谢您的回答,再次在我的问题中,当我们有“有关系”时,我们可以使用“扩展”关键字吗?
  • @AHF 根据我的回答中的第一句话你不能用extends...不。
【解决方案2】:

我建议您查看此链接,以了解 is-a 和 has-a 关系之间的区别 What is the difference between IS -A relationship and HAS-A relationship? Java

还可以在 java 中搜索组合、聚合、关联(具有关系类型)

回答您的问题,使用它没有任何障碍,但您需要有充分的理由从 Department 继承 University。

【讨论】:

    猜你喜欢
    • 2021-12-23
    • 2011-07-05
    • 2022-12-13
    • 2018-11-05
    • 2010-09-24
    • 1970-01-01
    • 2015-01-25
    • 2016-11-13
    • 1970-01-01
    相关资源
    最近更新 更多