深入理解Java面向對象的三大特性——封裝

封裝

1,在面向對象程式設計方法中,封裝(英語:Encapsulation)是指一種將抽象性函式接口的實現細節部份包裝、隱藏起來的方法
–>實現封裝的關鍵在於絕對不能讓類中的方法直接的訪問其他類的實例域(對象中的數據)。程序僅通過對象的方法(操縱數據的過程)與對象數據進行交互——方法就是對實現細節的一種封裝。封裝給予對象了“黑盒”的特徵,這是提高重用性和可靠性的關鍵。這意味着一個類可以全面地改變存儲數據的方式,只要仍舊使用戶同樣的方法操縱數據,其他對象就不會知道或介意所發生的變化——對數據和數據操作的封裝。(java核心技術卷一)
–>可以說,封裝就是隱藏一切可以隱藏的東西,只向外界提供最簡單的接口。
2,實現封裝的步驟
1>修改數據的可見性來限制對屬性的訪問(一般限制爲private),例如:

public class Person{
	private String name;
	private int age;
}
這段代碼中,將name和age屬性設置爲私有的,只有本類才能訪問,其他類都訪問不了,如此就對信息進行了隱藏。

2,對每個值屬性提供對外的公共方法訪問,也就是創建一對賦取值方法,用於對私有屬性的訪問,例如:

public class Person{
	private String name;
	private int age;
	public int getAge(){
		return age;
	}
	public String getName(){
		return name;
	}
	public void setAge(int age){
		this.age = age;
	}
	public void setName(String name){
		this.name = name;
	}

採用this關鍵字是爲了解決實例變量(private String name)和局部變量(setName(String name)中的name變量)之間發生的同名的衝突。
3,this關鍵字——表示的當前對象
this.方法名稱 ——用來訪問本類的成員方法
this();——訪問本類的構造方法–>()中可以有參數就是調用指定的有參構造
注意事項:
1>this()不能使用在普通方法中,只能寫在構造方法中
2>必須是構造方法中的第一條語句
對於this關鍵字的詳細介紹,可參考博客:
this關鍵字:

public class Student{
	String name;//定義一個成員變量name
	private void setName(String name){//定義一個參數(局部變量)name
		this.nme = name;//將局部變量的值傳遞給成員變量
	}
}

4,static import 靜態導入的機制
–>J2SE1.5裏引入了“static import” 機制,可以略掉所在的類的接口名的方式,來使用靜態成員。static import和import其中一個不一致的地方就是在static import導入的是靜態成員,而import導入的是類或者接口。
–>這裏有幾個問題需要弄清楚:
1,Static Import無權改變無法使用本來就不能使用的靜態成員的約束,上面例子的StaticTest和staticFieldsClass不是在同一個包下,所以StaticTest只能訪問到staticFieldsClass中public的變量。使用了Static Import也同樣如此。
2,導入的靜態成員和本地的靜態成員名字相同起了衝突,這種情況下的處理規則,是“本地優先。
3,不同的類(接口)可以包括名稱相同的靜態成員。例如在進行Static Import的時候,出現了“兩個導入語句導入同名的靜態成員”的情況。在這種時候,J2SE 1.5會這樣來加以處理:
(1)如果兩個語句都是精確導入的形式,或者都是按需導入的形式,那麼會造成編譯錯誤。
(2)如果一個語句採用精確導入的形式,一個採用按需導入的形式,那麼採用精確導入的形式的一個有效。
–>關於靜態導入機制的詳細理解可以參考博文:
import和static import的區別:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章