Java 聚合与组合
在Java中,聚合和组合是紧密相连的两个概念。 组合是类之间的紧密关联,而聚合是弱关联。
Java 中的组合
组合是指一个基类对象拥有另一个派生类对象,并且派生类对象不能离开基类而存在。
例如,构建一个人类将有几个子类:手、腿和心脏。 当人类对象死亡时,它的所有子部分都不再有意义地存在。
Java 中的聚合
聚合是指基类对象及其派生类对象可以独立存在。 例如,如果我们构造一个 Player 基类并从中派生出一个 Team 类,那么即使 Player 对象被销毁,团队仍然存在。
同样,如果团队解散,那么玩家仍然存在并可以加入另一个团队。
组合与聚合
成分 | 聚合 |
---|---|
PART-OF 关系或特殊 HAS A 关系 | HAS A 关系 |
单向依赖 | 双向依赖 |
强关联类型 | 弱关联类型 |
子类依赖于父类 | 子类独立于父类 |
UML 图表示是黑色菱形 | UML 图表示是白色菱形 |
在 Java 中使用组合
import java.io.*;
import java.util.*;
class Job {
private int pay;
private int id;
public int getWage() {
return pay;
}
public void setWage(int pay) {
this.pay= pay;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
class Person {
private Job job;
public Person(){
this.job=new Job();
job.setWage(650);
}
public int getWage() {
return job.getWage();
}
}
class Main {
public static void main(String[] args) {
Person person = new Person();
int salary = person.getWage();
System.out.println("The wage of the person for a job: "+salary);
}
}
输出:
The wage of the person for a job: 650
上面的代码显示了两个类之间的组合关系。 组合被归类为关系的一部分类型; 在上述情况下,工资是工作的一部分。
我们为这两个类定义了参数化构造函数、setter 和 getter 函数。
在 Java 中使用聚合
import java.io.*;
import java.util.*;
class Bank
{
private String BankName;
Bank(String name)
{
BankName = name;
}
public String getBankName()
{
return BankName;
}
}
class Employee
{
private String EmployeeName;
Employee(String name)
{
EmployeeName = name;
}
public String getEmployeeName()
{
return EmployeeName;
}
}
class Main {
public static void main(String[] args)
{
Bank bank = new Bank("IMF");
Employee emp = new Employee("Rob");
System.out.println(emp.getEmployeeName() + " is an employee of the " + bank.getBankName());
}
}
输出:
Rob is an employee of the IMF
上面的代码显示了两个类之间的聚合关系。 聚合被归类为 has-a 类型的关系; 在上述案例中,银行有一位名叫 Rob 的员工。
我们为这两个类定义了参数化构造函数、setter 和 getter 函数。
相关文章
Java 错误 Java.Security.InvalidKeyException: Illegal Key Size
发布时间:2023/07/15 浏览次数:98 分类:Java
-
本篇文章介绍包含 java.security.InvalidKeyException: Illegal key size 的 Java 代码。 然后,我们将了解其可能的原因。最后,它通过消除指定的错误来引导我们找到解决方案。
Java 错误 Java.SQL.SQLException: Access Denied for User Root@Localhost
发布时间:2023/07/15 浏览次数:72 分类:Java
-
本篇文章介绍如何解决 Java 中的 java.sql.SQLException: Access Denied for user 'root'@'localhost' 错误。修复 Java 中的 java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
Java 异常 Java.Lang.ClassNotFoundeException: Sun.Jdbc.Odbc.JdbcOdbcDriver
发布时间:2023/07/15 浏览次数:106 分类:Java
-
本篇文章介绍了 Java 中的 java.lang.ClassNotFoundException: sun.jdbc.odbc.JdbcOdbcDriver 错误。修复 Java 中的 java.lang.ClassNotFoundException: sun.jdbc.odbc.JdbcOdbcDriver
Java 错误 Gateway Process Exited Before Sending Its Port Number
发布时间:2023/07/15 浏览次数:104 分类:Java
-
本篇文章介绍了 Java 中 Java gateway process exited before sending the driver its port number 错误 Java gateway process exited before sending the driver its port number 错误
修复 Java 中 Java.Net.BindException: Address Already in Use: Bind 错误
发布时间:2023/07/15 浏览次数:77 分类:Java
-
本篇文章介绍了 Java 中的 java.net.BindException:Address already in use: Bind 错误。修复Java 中的 java.net.BindException:Address already in use: Bind
修复 Java 中 Java.Net.SocketException: Broken Pipe 错误
发布时间:2023/07/15 浏览次数:162 分类:Java
-
本篇文章介绍了使用 Java 编程的 java.net.SocketException: Broken pipeline 错误,并重点介绍了其可能的原因和解决方案。错误描述、原因及解决方法
Java 异常 Java.Lang.ClassNotFoundException: Org.SpringFramework.Web.Servlet.Dis
发布时间:2023/07/15 浏览次数:179 分类:Java
-
今天关于 Java 的文章将介绍错误 java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet。什么是 java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet
Java 抛出运行时异常 Throw Runtime Exception
发布时间:2023/07/15 浏览次数:146 分类:Java
-
本篇文章介绍如何在 Java 中引发运行时异常。Java 抛出运行时异常 Runtime Exception 是所有 Java 异常的父类,这些异常发生时会导致程序崩溃或崩溃。
Java 中抛出新异常 Throw New Exception
发布时间:2023/07/15 浏览次数:130 分类:Java
-
本文将展示如何使用 if ... else 条件语句生成错误。 我们还将使用示例和解释来讨论该主题,以使该主题更容易。在 Java 中生成一个简单错误