封裝和private關(guān)鍵字 2016年10月11日 00:07:01 閱讀數(shù):1628 /* private: 是一個(gè)權(quán)限修飾符 可以修飾成員變量和成員方法 被其修飾的成員只能在本類中被訪問(wèn) */ class Demo { //int num = 10; //用private修飾 private int num = 10; public void show() { System.out.println(num); } private void method() { System.out.println("method"); } public void function() { method(); } } class PrivateDemo { public static void main(String[] args) { Demo d = new Demo(); //不能方法私有的成員變量 //System.out.println(d.num); d.show(); //不能訪問(wèn)私有的成員方法 //d.method(); d.function(); } } /* 定義一個(gè)學(xué)生類: 成員變量:name,,age 成員方法:show()方法 我們?cè)谑褂眠@個(gè)案例的過(guò)程中,,發(fā)現(xiàn)了一個(gè)問(wèn)題: 通過(guò)對(duì)象去給成員變量賦值,可以賦值一些非法的數(shù)據(jù),。 這是不合理的,。 應(yīng)該是這個(gè)樣子的:在賦值之前,,先對(duì)數(shù)據(jù)進(jìn)行判斷,。 判斷到底在哪里做比較合適呢? StudentDemo類是一個(gè)測(cè)試類,,測(cè)試類一般只創(chuàng)建對(duì)象,,調(diào)用方法,。 所以,,這個(gè)判斷應(yīng)該定義在Student類中,。 而我們?cè)诔蓡T變量的位置可不可以進(jìn)行數(shù)據(jù)判斷呢? 是不可以的,,因?yàn)樽鰯?shù)據(jù)校驗(yàn),,必須要依靠一些邏輯語(yǔ)句。 邏輯語(yǔ)句是應(yīng)該定義在方法中的,,所以,,我們最終決定在Student類中提供一個(gè)方法 來(lái)對(duì)數(shù)據(jù)進(jìn)行校驗(yàn),。 按照我們前面的分析,,我們給出了一個(gè)方法進(jìn)行校驗(yàn),。 但是呢,,它偏偏不調(diào)用方法來(lái)賦值,,還是直接賦值了, 這樣我們的方法就沒(méi)有起到作用,。 我就應(yīng)該要求你必須使用我的方法,而不能直接調(diào)用成員變量賦值,。 怎么去強(qiáng)制要求不能直接使用成員變量呢? 針對(duì)這種情況,,Java就提供了一個(gè)關(guān)鍵字 private private:私有的??梢孕揎棾蓡T變量和成員方法,。 注意:被private修飾的成員只能在本類中訪問(wèn),。 其實(shí)我講到現(xiàn)在講解的是一個(gè)封裝的思想,。 封裝:是指隱藏對(duì)象的屬性和實(shí)現(xiàn)細(xì)節(jié),,僅對(duì)外提供公共訪問(wèn)方式,。 */ class Student { //姓名 String name; //年齡 private int age; //寫(xiě)一個(gè)方法對(duì)數(shù)據(jù)進(jìn)行校驗(yàn) /* 返回值類型:void 參數(shù)列表:int a */ public void setAge(int a) { if(a < 0 || age > 120) { System.out.println("你給的年齡有問(wèn)題"); }else { age = a; } } //show()方法,顯示所有成員變量值 public void show() { System.out.println("姓名:"+name); System.out.println("年齡:"+age); } } class StudentDemo { public static void main(String[] args) { //創(chuàng)建學(xué)生對(duì)象 Student s = new Student(); s.show(); System.out.println("--------------"); //給成員變量賦值 s.name = "林青霞"; //s.age = 27; s.setAge(27); s.show(); System.out.println("--------------"); //給age賦值 //s.age = -27; //這個(gè)數(shù)據(jù)是不合理的 //通過(guò)方法給值 s.setAge(-27); s.show(); System.out.println("--------------"); } } /* 封裝和private的應(yīng)用: A:把成員變量用private修飾 B:提高對(duì)應(yīng)的getXxx()和setXxx()方法 */ //定義學(xué)生類 class Student { //姓名 private String name; //年齡 private int age; //姓名獲取值 public String getName() { return name; } //姓名設(shè)置值 public void setName(String n) { name = n; } //年齡獲取值 public int getAge() { return age; } //年齡賦值 public void setAge(int a) { age = a; } } //測(cè)試類 class StudentTest { public static void main(String[] args) { //創(chuàng)建學(xué)生對(duì)象 Student s = new Student(); //使用成員變量 //錯(cuò)誤:被私有修飾了,外界不能直接訪問(wèn)了 //System.out.println(s.name+"---"+s.age); System.out.println(s.getName()+"---"+s.getAge()); //給成員變量賦值 //s.name = "林青霞"; //s.age = 27; //通過(guò)方法給賦值 s.setName("林青霞"); s.setAge(27); System.out.println(s.getName()+"---"+s.getAge()); } }
|
|
來(lái)自: 潘仕城 > 《封裝和private關(guān)鍵字》