Java教程17—Java中的聚合关系

编程知识 行业动态 更新时间:2024-06-13 00:22:36

聚合是一种特殊的关联形式。
它是两个类之间的关系,如关联,但它是一个方向关联,这意味着它严格地是单向关联。
它代表了一种HAS-A关系。


Java中的聚合示例

例如,考虑两个类Studentclass和Addressclass。
每个学生都有一个地址,所以学生和地址之间的关系是一个Has-A关系。
但是如果你认为它的反之亦然,那就没有任何意义,因为Address它不需要有Student必要。
让我们在java程序中编写这个例子:

class Address
{
    int streetNum;
    String city;
    String state;
    String country;
    Address(int street, String c, String st, String coun)
    {
        this.streetNum=street;
        this.city =c;
        this.state = st;
        this.country = coun;
    }
}
class StudentClass
{
    int rollNum;
    String studentName;
    //和Address类创建一个 HAS-A 关系 
    Address studentAddr;
    StudentClass(int roll, String name, Address addr){
        this.rollNum=roll;
        this.studentName=name;
        this.studentAddr = addr;
    }
    public static void main(String args[]){
        Address ad = new Address(55, "Agra", "UP", "India");
        StudentClass obj = new StudentClass(123, "Chaitanya", ad);
        System.out.println(obj.rollNum);
        System.out.println(obj.studentName);
        System.out.println(obj.studentAddr.streetNum);
        System.out.println(obj.studentAddr.city);
        System.out.println(obj.studentAddr.state);
        System.out.println(obj.studentAddr.country);
    }
}

程序输出:

        123
        Chaitanya
        55
        Agra
        UP
        India

上面的示例显示了Student和Address类之间的聚合。
您可以看到在Student类中我已经声明了Address类型的属性来获取学生地址。
它是Java中聚合的典型示例。


为什么我们需要聚合?

维护代码的可重用性。
要理解这一点,再次使用相同的示例。
假设还有另外两个类College,Staff以及上面两个类Student和Address。
为了保持Student的地址,College地址和Staff的地址,我们不需要一次又一次地使用相同的代码。
我们只需要在定义每个类时使用Address类的引用,如:

Student Has-A Address (Has-a relationship between student and address)
College Has-A Address (Has-a relationship between college and address)
Staff Has-A Address (Has-a relationship between staff and address)

因此,我们可以通过使用聚合关系来提高代码的可重用性。


所以,如果我必须在代码中写这个,我会这样做:

class Address
{
    int streetNum;
    String city;
    String state;
    String country;
    Address(int street, String c, String st, String coun)
    {
        this.streetNum=street;
        this.city =c;
        this.state = st;
        this.country = coun;
    }
}
class StudentClass
{
    int rollNum;
    String studentName;
    //Creating HAS-A relationship with Address class
    Address studentAddr;
    StudentClass(int roll, String name, Address addr){
        this.rollNum=roll;
        this.studentName=name;
        this.studentAddr = addr;
    }
    ...
}
class College
{
    String collegeName;
    //Creating HAS-A relationship with Address class
    Address collegeAddr;
    College(String name, Address addr){
        this.collegeName = name;
        this.collegeAddr = addr;
    }
    ...
}
class Staff
{
    String employeeName;
    //Creating HAS-A relationship with Address class
    Address employeeAddr;
    Staff(String name, Address addr){
        this.employeeName = name;
        this.employeeAddr = addr;
    }
    ...
}

正如您所看到的,我们没有在三个类中的任何一个中编写Address代码,我们只是使用Address类创建了HAS-A关系以使用Address代码。
上面代码中的点点(…)部分可以用public static void main方法替换,与第一个例子中看到的类似。


原文地址:

https://beginnersbook/2013/05/aggregation/

更多推荐

Java教程17—Java中的聚合关系

本文发布于:2023-04-02 19:51:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/185f0fcdd98b72513c6c8bf909bdfc7a.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:关系   教程   Java

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!