摘要:封裝概述封裝是指隱藏對象的屬性和實現細節,僅對外提供公共訪問方式這是什么意思呢簡單的來說就是我將不想給別人看的數據,以及別人無需知道的內部細節,鎖起來,我們只留下一些入口,使其與外部發生聯系。
封裝概述:
封裝是指隱藏對象的屬性和實現細節,僅對外提供公共訪問方式
這是什么意思呢?
簡單的來說就是我將不想給別人看的數據,以及別人無需知道的內部細節, “鎖起來” ,我們只留下一些入口,使其與外部發生聯系。
我們如何給我們的數據 “上鎖” 呢?
我們使用,public、private、protected 等權限修飾符 在類的內部設定了邊界,這些不同程度的 ”鎖“ 決定了緊跟其后被定義的東西能夠被誰使用。
封裝的好處:· 隱藏實現細節,提供公共的訪問方式
· 提高了代碼的復用性
· 提高安全性
封裝好處的體現方式: (一)隱藏實現細節,提供公共的訪問方式隱藏實現細節怎么理解呢?
我們將一些功能封裝到類中,而客戶端的程序員,不需要知道類中的這個方法的邏輯原理,類程序員只需要給他一個對外的接口,客戶端程序員只需要能夠調用這個方法即可,
例如:夏天宿舍很熱,我們(用戶)只需要操作遙控器即可使用空調,并不需要了解空調內部是如何運行的
提供公共的訪問方式又怎么理解呢?
我們先來看一段標準案例
public class Student { //定義成私有成員變量(private) private String name; private int age; //無參構造 public Student() { super(); } //帶參構造 public Student(String name, int age) { super(); this.name = name; this.age = age; } //成員變量的set和get方法(與外界聯系的橋梁) public void setName(String name) { this.name = name; } public String getName() { return name; } public void setAge(int age) { this.age = age; } public int getAge() { return age; } }
public class StudentDemo { public static void main(String[] args) { //創建學生類對象 s Student s = new Student(); //對象s調用類中的公共方法setName()和setAge() //set方法給成員變量賦值 s.setName("BWH_Steven"); s.setAge(20); //get方法獲取成員變量 System.out.println(s.getName() + s.getAge()); } }
我們可以看到在上面的案例中,成員變量都使用private修飾,而下面的get和set方法均使用了public修飾,其實被private修飾的屬性就是我們想要鎖起來的數據,而set、get方法就是我們打開這把鎖的鑰匙
被private所修飾的內容是,除類型創建者和類型的內部方法之外的任何人都不能訪問的元素,所以我們這些數據就被我們通過private “鎖” 了起來,而我們外界是可以通過創建對象來調用一個類中的公共方法的,所以被public修飾的 set和get方法外界所能訪問的,而這兩個方法又可以直接訪問我們的私有成員變量,所以set和get方法就成為了私有成員與外界溝通的鑰匙。
(二)提高了代碼的復用性功能被封裝成了類,通過基類與派生類之間的一些機制(組合和繼承),來提高代碼的復用性
Ps:關于代碼復用問題,我會專篇講解,今天還是著重講解封裝帶來的主要好處
(三)提高安全性看完上面的代碼,可能大家會有一點疑惑,這些屬性、方法封裝后我都還可以看得到,這哪里體現了安全呢?大家來一起看一看我們下面這個改進版的案例
public class Student { private String name; private int age; public Student() { super(); } public Student(String name, int age) { super(); this.name = name; this.age = age; } public void setName(String name) { this.name = name; } public String getName() { return name; } //在setAge()方法中加入了校驗的內容 //不合法數據是不允許傳遞給成員變量的 public void setAge(int age) { if (age < 0 || age > 120) { System.out.println("Error"); }else { this.age = age; } } public int getAge() { return age; } }
public class StudentDemo { public static void main(String[] args) { Student s = new Student(); System.out.println(s.getName() + s.getAge()); //錯誤的方式!!! s.name = "BWH_Steven"; s.age = 20; System.out.println(s.getName() + s.getAge()); //正確的方式!!! s.setName("BWH_Steven"); s.setAge(20); } }
我們用private來修飾我們的成員變量不是沒有任何依據的,如果我們的成員變量修飾符改為public,這句意味著外界可以使用對象直接訪問,修改這個成員變量,這可能會造成一些重大的問題
例如:外界通過對象去給成員變量賦值,可以賦值一些非法的數據
這明顯是不合理的。所以在賦值之前應該先對數據進行判斷
StudenDemo是一個測試類,測試類一般只創建對象,調用方法
所以這個判斷應該定義在Student類中。需要使用邏輯語句
邏輯語句應該定義在方法中。所以在Student類中提供一個方法來對數據進行校驗
但是如果偏偏不調用方法來賦值,還是直接賦值,這樣我們的方法就沒有起作用
所以我們必須強制要求使用我的方法,而不能直接調用成員變量
這也正是我們使用private修飾成員變量的原因!
結尾:如果內容中有什么不足,或者錯誤的地方,歡迎大家給我留言提出意見, 蟹蟹大家 !^_^
如果能幫到你的話,那就來關注我吧!
在這里的我們素不相識,卻都在為了自己的夢而努力 ?一個堅持推送原創Java技術的公眾號:理想二旬不止
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/74656.html
摘要:一概述集合是引入的新的內置對象類型,其特點同數學意義的集合,即集合內所有元素不重復元素唯一。數組集合對比數組和集合,數組可以加入重復數據,而集合的所有元素是唯一的不允許重復。因此,適合臨時存放一組對象,以及存放跟對象綁定的信息。 本文同步帶你入門 帶你入門 JavaScript ES6 (五) 集合,轉載請注明出處。 前面我們學習了: for of 變量和擴展語法 塊作用域變量和解構...
閱讀 4767·2021-11-15 11:39
閱讀 2702·2021-11-11 16:55
閱讀 2209·2021-10-25 09:44
閱讀 3514·2021-09-22 16:02
閱讀 2444·2019-08-30 15:55
閱讀 3133·2019-08-30 13:46
閱讀 2676·2019-08-30 13:15
閱讀 1961·2019-08-30 11:12