Java面向對象(OOP)概念
Java面向對象(OOP)概念
Java命名約定
Java對象和類
Java構造器(構造方法)
Java static關鍵字
Java this關鍵字
Java繼承
Java聚合
Java方法重載
Java方法重寫
Java super關鍵字
Java實例初始化程序塊
Java final關鍵字
Java多態
Java靜態綁定和動態綁定
Java instanceof運算符
Java抽象類
Java接口
Java抽象類和接口的區別
Java包
Java訪問修飾符
Java封裝
Java Object類
Java對象克隆
Java數組
Java包裝類
Java按值調用和引用調用
Java strictfp關鍵字
Java命令行參數
對象和類之間的區別
java中方法重載和方法重寫的區別
Java聚合
聚合
如果一個類有一個類的實體引用(類中的類),則它稱爲聚合。 聚合表示HAS-A關係。
考慮有一種情況,Employee
對象包含許多信息,例如:id
,name
,emailId
等。它包含另一個類對象:address
,其包含它自己的信息,例如:城市,州,國家,郵政編碼等,如下所示。
class Employee{
int id;
String name;
Address address;//Address is a class
...
}
在這種情況下,Employee
有一個實體引用地址(Address
),因此關係是:Employee HAS-A Address
。
爲什麼要使用聚合?
- 代碼可重用性。
聚合的簡單示例
在這個例子中,在Circle
類中創建了Operation
類的引用。
class Operation {
int square(int n) {
return n * n;
}
}
class Circle {
Operation op;// aggregation
double pi = 3.14;
double area(int radius) {
op = new Operation();
int rsquare = op.square(radius);// code reusability (i.e. delegates the
// method call).
return pi * rsquare;
}
public static void main(String args[]) {
Circle c = new Circle();
double result = c.area(5);
System.out.println(result);
}
}
執行上面代碼,得到以下結果 -
78.5
何時使用聚合?
- 當沒有
is-a
關係時,通過聚合也能最好地實現代碼重用。 - 只有在所涉及的對象的整個生命週期內維持關係爲
is-a
時,才應使用繼承; 否則,聚合是最好的選擇。
理解聚合的一個示例
在此示例中,Employee
中擁有Address
對象,address
對象包含其自己的信息,例如城市,州,國家等。在這種情況下,關係是員工(Employee
)HAS-A
地址(Address
)。
Address.java
public class Address {
String city, province;
public Address(String city, String province) {
this.city = city;
this.province = province;
}
}
Emp.java
public class Emp {
int id;
String name;
Address address;
public Emp(int id, String name, Address address) {
this.id = id;
this.name = name;
this.address = address;
}
void display() {
System.out.println(id + " " + name);
System.out.println(address.city + " " + address.province);
}
public static void main(String[] args) {
Address address1 = new Address("廣州", "廣東");
Address address2 = new Address("海口", "海南");
Emp e = new Emp(111, "Wang", address1);
Emp e2 = new Emp(112, "Zhang", address2);
e.display();
e2.display();
}
}
執行上面代碼,得到以下結果 -
111 Wang
廣州 廣東
112 Zhang
海口 海南