概念
封裝是把過程和數據包圍起來,對數據的訪問只能通過已定義的接口。面向對象計算始於這個基本概念,即現實世界可以被描繪成一系列完全自治、封裝的對象,這些對象通過一個受保護的接口訪問其他對象。封裝是一種信息隱藏技術,在java中通過關鍵字private,protected和public實現封裝。什麼是封裝?封裝把對象的所有組成部分組合在一起,封裝定義程式如何引用對象的數據,封裝實際上使用方法將類的數據隱藏起來,控制用戶對類的修改和訪問數據的程度。 適當的封裝可以讓程式碼更容易理解和維護,也加強了程式碼的安全性。
例子
封裝的簡單例子:
先來個例子看看;
public class Man{
//對屬性的封裝,一個人的姓名,年齡,妻子都是這個對象(人)的私有屬性
private String name;
private int age;
private Woman wife;
//對該人對外界提供方法的封裝,可以設定妻子,姓名,年齡也可以獲得男人的姓名和年齡
// 方法封裝
public void setWife(Woman wife) {
this.wife = wife;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class Woman {
// 屬性封裝
private String name;
private int age;
private Man husband;
// 方法封裝
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Man getHusband() {
return husband;
}
public void setHusband(Man husband) {
this.husband = husband;
}
}
/**
* 仔細看就會發現,Man類沒有提供getWife的方法,這是因為男人不想讓自己的妻子被外界訪問,
*
* 接下來呢,就是封裝可以把一個對象的屬性私有,而提供一些可以被外界訪問的屬性的方法,
*
* 比如說,name屬性,Man和Woman類都有相應的get和set方法,外界都可以通過這些方法訪問和修改
*
* 同時對一些對象不想讓外界訪問的屬性,就不提供其方法,比如說Man的wife屬性,就沒有get方法
*
* 外界是不能得到Man類的wife屬性的
*
*/
上面那例子可能沒有突出封裝的好處,下面來個超簡單的表達下:
public class Show{
public static void show(String str){
System.out.println(str);
}
}
上面就是對 System.out.println();的封裝。
調用的時候 :
public class Use{
public static void main(String[] args){
Show.show("封裝");
}
}
這樣用的時候就不用使:System.out.println("封裝");
封裝的作用
① 對象的數據封裝特性徹底消除了傳統結構方法中數據與操作分離所帶來的種種問題,提高了程式的可復用性和可維護性,降低了程式設計師保持數據與操作內容的負擔。
②對象的數據封裝特性還可以把對象的私有數據和公共數據分離開,保護了私有數據,減少了可能的模組間干擾,達到降低程式複雜性、提高可控性的目的。