[javase學習筆記]-6.7 封裝

來源:互聯網
上載者:User

[javase學習筆記]-6.7 封裝

這一節我們學習物件導向中的第一個特性,封裝(encapsulation)

封裝:是指隱藏對象的發生和實現細節,僅對外提供公用訪問方式.

那麼什麼是隱藏對象的實現細節?我們來舉例學習.

比如我們來定義一個人的類,簡單點說,人的屬性有年齡,行為有說話.

我們看下面的代碼:

class Person//定義一個人的類{int age;void speak(){System.out.println("age = "+age);}}class PersonDemo//定義測試類別{public static void main(String[] args) {Person p = new Person();p.age = -20;//這時代碼仍然正常運行了,這就造成了安全隱患p.speak();}}

結果:

我們看到存在安全隱患,當我們為人的年齡屬性賦值為負數時,程式是正常啟動並執行.

那麼現在把Person類修改一下


class Person { private int age; void speak() { System.out.println("age = "+age); } }
結果:

我們看到報錯了,因為我們對age進行了私人,在PersonDemo類中無法訪問.

為了進一步解決問題,我們再對兩個類進行修改:

class Person{private int age;//把該成員屬性設定為私人public void setAge(int a){if(a>0 && a<130){age = a;speak();}elseSystem.out.println("錯誤的資料");}void speak(){System.out.println("age = "+age);}}class PersonDemo{public static void main(String[] args) {Person p = new Person();p.setAge(-20);//調用方法設定年齡,但是我們不知道該方法的內部實現}}
結果:

我們看到當age>0 && age<130時,才合法.

從這個過程我們看到,當我們要操作Person中的age屬性時,是通過setAge方法來實現的,但是setAge方法是怎麼實現的,外部類是無法知道的,這就是我們所要說的隱藏對象的屬性和實現細節,也就是封裝.

其實對於屬性的封裝,為了外部存取,我們一般有規範的get和set方法,我們來看一下兩個規範且常用的方法:

class Person{private int age;//把該成員屬性設定為私人public void setAge(int a)//設定年齡{age = a;}public int getAge()//擷取年齡{return age;}}

下面我們再來說說封裝的優點和原則:

優點:

1.提高代碼安全性;

2.實現對內部屬性的可控性;

3.提高代碼的複用性;

4.隔離變化;

原則:

1.將不需要對外提供的內容都隱藏起來;

2.把屬性都隱藏起來,提供公用方法供外部存取(當然不是所有方法都必須是公用方法).

最後我們再看一下剛才我們用到的一個關鍵字:private.

private關鍵字:指私人,是一個許可權修飾符,用於修飾成員.私人的內容只在本類中有效.

它的常見用法:就是將成員變數私人化,對外提供對應的set,get方法對其進行訪問.提高對資料訪問的安全性.

注意:私人僅僅是封裝的一種體現而已.

對於java語言來講,最小的封裝體就是函數.類也是封裝體.架構本身也是封裝體.這些都一個共性,就是我們可以不知道實現細節,直接拿來用就可以了.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.