封裝將內部細節封裝起來,只暴露外部介面。 比如我們的電視就將複雜的內部線路用外殼封裝起來,只留下外部按鈕或遙控,用戶只需要知道按鈕或遙控的作用就可以,無需明白電視內部是如何工作。 而且封裝也保障了安全性,用戶只能去使用暴露在外部的介面,不能改變內部結構,保障了正常運行。 封裝後,使用者不必知曉複雜的 ...
封裝將內部細節封裝起來,只暴露外部介面。
比如我們的電視就將複雜的內部線路用外殼封裝起來,只留下外部按鈕或遙控,用戶只需要知道按鈕或遙控的作用就可以,無需明白電視內部是如何工作。
而且封裝也保障了安全性,用戶只能去使用暴露在外部的介面,不能改變內部結構,保障了正常運行。
封裝後,使用者不必知曉複雜的內部功能如何實現(這時設計者的事),只需要知道暴露在外部的介面的功能即可,
便於使用者調用,對內部進行周全的考慮是設計者的事。
封裝後內部的屬性無法訪問,也保障了程式的安全性(避免了某些誤操作導致不需要修改的值發生了變化)。
封裝就是內部某些屬性方法對外不可見(即不能進行修改),這時我們就需要通過訪問控制符來實現封裝。
通過設置訪問許可權就可以實現封裝,
下麵舉一個例子
1 public class Test { 2 public static void main(String[] args){ 3 Person man = new Person(); 4 man.setAge(1000); //年齡1000顯然是不行的,如果沒有封裝可以直接訪問age 5 man.setNmae("hcf"); //顯然會造成問題。 6 man.putInformation(); 7 } 8 } 9 10 class Person{ //person相當於被封裝起來了,只暴露要使用的部分,其他部分不可見、 11 private int age; //age和name只能被本類看見,別的類要想訪問必須通過暴露在外的setAge和setNmae函數。 12 private String name; 13 void putInformation(){ 14 System.out.println("姓名:" + name + "\n" + "age:" + age); 15 } 16 void setNmae(String name){ 17 this.name = name; 18 } 19 void setAge(int age){ //可能大家會問為什麼要這樣”多此一舉“,非要通過一個暴露在外的函數來實現訪問。 20 if(age < 0 || age > 130){//大家看下麵,通過一個函數來接受參數,可以對這個傳遞進來的數據進行判斷, 21 System.out.println("請輸出正確的年齡");//可以有效避免問題數據,不當訪問等造成的重要參數被修改,從而導致程式崩潰。 22 }else{ //這樣封裝起來即可以保證內部數據的正確性,安全性,也方便外部調用, 23 this.age = age; //可以實現高內聚,低耦合。 24 } 25 } 26 }
運行結果:
請輸出正確的年齡
姓名:hcf
age:0