標籤:
封裝:是指隱藏對象的屬性和實現細節,進對外提供公用訪問方式
好處:將變化隔離。便於使用,提高重用性,提高安全性
封裝原則:將不需要對外提供的額內容隱藏起來,把屬性都隱藏,提供公用方法對其訪問
1 package com_package2; 2 3 class Age { 4 int age; 5 /*/ public void Haha(int t) 6 //{ if(t>=0) 7 // age=t; 8 else 9 age=0;10 }11 // public int getHaha(int t)12 // {13 // return t;14 15 // }**/16 void speak()17 {18 System.out.println("age="+age);19 20 }21 22 }
首先注意觀察:Age類中的屬性age沒有說公有,也沒有說私人,再加上這個類也沒說是私人和公有,那麼這個屬性是不受保護的,建立對象後,age是可以被改動也可以被訪問的
但是如果age屬性變成了private那麼AgeDemo是無法訪問到age屬性的
1 package com_package2; 2 3 public class AgeDemo { 4 public static void main(String[]args) 5 { 6 Age a = new Age();//建立對象 7 //a.Haha(20); 8 a.age=20;//訪問Age類中的年齡屬性 9 a.speak();//訪問Age類中的speak方法10 11 }12 13 }
這裡的age是不被保護的
再來看,要是想要訪問private屬性,那麼,可以在中間加一個給屬性賦值的public方法如下:
1 package com_package2; 2 3 class Age { 4 private int age; 5 public void Haha(int t) 6 { age=t; 7 } 8 // public int getHaha(int t) 9 // {10 // return t;11 12 // }13 void speak()14 {15 System.out.println("age="+age);16 17 }18 19 }
在這裡面,age是私人的其他類無法訪問,但是加了一個public方法來對age屬性進行賦值
1 package com_package2; 2 3 public class AgeDemo { 4 public static void main(String[]args) 5 { 6 Age a = new Age(); 7 //a.Haha(20); 8 a.Haha(20); 9 a.speak();10 11 }12 13 }
通過Haha對age進行訪問得到age=20
在此基礎上可以增加一點演算法:
1 package com_package2; 2 3 class Age { 4 private int age; 5 public void Haha(int t) 6 { if(t>=0&&t<=130) 7 age=t; 8 else 9 age=-1;10 }11 // public int getHaha(int t)12 // {13 // return t;14 15 // }16 void speak()17 {18 System.out.println("age="+age);19 20 }21 22 }
1 package com_package2; 2 3 public class AgeDemo { 4 public static void main(String[]args) 5 { 6 Age a = new Age(); 7 //a.Haha(20); 8 a.Haha(-20); 9 a.speak();10 11 }12 13 }
這樣就可以判斷年齡的可能性 得-1
由此演變成get set方法:
1 package com_package2; 2 3 class Age { 4 private int age; 5 public void setAge(int t) 6 { if(t>=0&&t<=130) 7 age=t; 8 else 9 age=-1;10 }11 public int getAge(int t)12 {13 return t;14 15 }16 void speak()17 {18 System.out.println("age="+age);19 20 }21 22 }
1 package com_package2; 2 3 public class AgeDemo { 4 public static void main(String[]args) 5 { 6 Age a = new Age(); 7 //a.Haha(20); 8 a.setAge(-20); 9 a.speak();10 11 }12 13 }
這樣的演變就足以說明set,get方法的由來。通常情況下,會將類中的成員變數私人化,為了避免屬性直接被訪問導致資料錯誤,並對外界聽了公用的訪問方式,對該
屬性進行訪問,這樣做的好處是:可以對屬性進行可控,而對屬性訪問的公用方法名稱規範定義的格式是:set屬性(),get屬性()。當然get(),set()都可以在系統中手動產生。
關於這兩個方法:Java中的私人屬性set()是給屬性賦值的,get()是取得屬性值的
被設定和存取的屬性一般是私人
主要是起到封裝的作用,不允許直接對屬性操作
set()和get()不一定同時存在,看程式需求
物件導向(封裝)get set的由來