天天看點

Java 封裝

封裝是面向對象的三大特征之一,什麼是封裝?封裝有什麼好處?怎麼封裝,代碼怎麼寫呢?

  封裝從字面上來了解就是包裝的意思,專業點就是資訊隐藏,是指利用抽象資料類型将資料和基于資料的操作封裝在一起,使其構成一個不可分割的獨立實體,資料被保護在抽象資料類型的内部,盡可能地隐藏内部的細節,隻保留一些對外接口使之與外部發生聯系。系統的其他對象隻能通過包裹在資料外面的已經授權的操作來與這個封裝的對象進行交流和互動。也就是說使用者是無需知道對象内部的細節,但可以通過該對象對外提供的接口來通路該對象。

  類的封裝性即不能讓外面的類随意修改一個類的成員變量;

  在定義一個類的成員,使用private關鍵字說明這個成員的通路權限,隻能被這個類的其他成員方法調用,而不能被其他的類中的方法所調用;

  為實作封裝性,常将類的成員變量聲明為private,再通過public的方法來對這個變量進行通路。

  對一個變量的操作,一般都有 讀取和指派操作,我們一般定義兩個方法來實作這兩種操作,即:getxxx()與setxxx();

  一個類就是一個子產品,我們應該讓子產品僅僅公開必須要讓外界知道的内容,而隐藏其他的一切内容,進行程式設計時,應盡量避免一個子產品直接修改或操作另一個子產品的資料,子產品設計追求高内聚,低耦合。

  對于“一個”屬性來說,我們對外應該提供幾個通路入口呢?

  通常情況下我們通路對象的某個屬性,不外乎讀取(get)和修改(set),是以對外提供的通路入口應該有兩個,這兩個方法通常被稱為set方法和get方法

  (請注意:set和get方法通路的都是某個具體對象的屬性,不同的對象調用get方法擷取的屬性值不同,是以set和get方法必須有對象的存在才能調用,這樣的方法定義的時候不能使用static關鍵字修飾,被稱為執行個體方法。執行個體方法必須使用“引用”的方式調用。還記得之前我們接觸的方法都是被static修飾的,這些方法直接采用“類名”的方式調用,而不需要建立對象,在這裡顯然是不行的)

  

  總之,在java語言中封裝的步驟應該是這樣的:需要被保護的屬性使用private進行修飾,給這個私有的屬性對外提供公開的set和get方法,其中set方法用來修改屬性的值,get方法用來讀取屬性的值。并且set和get方法在命名上也是有規範的,

  規範中要求set方法名是set + 屬性名(屬性名首字母大寫),get方法名是get + 屬性名(屬性名首字母大寫)。

  其中set方法有一個參數,用來給屬性指派,set方法沒有傳回值,一般在set方法内部編寫安全控制程式,因為畢竟set方法是修改内部資料的,而get方法不需要參數,傳回值類型是該屬性所屬類型。