[Java] 5.1. 私有化

私有化,物件封裝的手法之一,將一些屬性或方法封裝有物件自已本身才可以存取。

 

image/svg+xml5.1. 私有化 - private class Person { String id ; String name ; int age ; } class Main{ public static void main( String [] args){ Person p1 = new Person(); p1. id = "k111222000" ; p1. name = " 林⼩美 " ; p1. age = 20 ; System.out.println(p1. id ); System.out.println(p1. name ); System.out.println(p1. age ); } } class Person { String id; String name; String gender ; private int age ; void show () { System.out.println( " 我的⾝份證字號是 " + id ); System.out.println( " 姓名是 " +name); System.out.println( " 年齡是 " + age ); } } class Main{ public static void main( String [] args){ Person p = new Person (); p . age = 20 ; } } 編譯時錯誤 Main.java:5: error: age has private access in Person p.age = 20; ^ 1 error class Person { String id; String name; String gender; private int age; void show() { System.out.println( " 我的⾝份證字號是 " +id); System.out.println( " 姓名是 " +name); System.out.println( " 年齡是 " +age); } private void xShow () { System.out.println( " 我的⾝份證字號是 " +id); System.out.println( " 姓名是 " +name); System.out.println( " 年齡是 " +age); } } J5_1_1 – Person.java . ⼈員類別( Person )。 . ⼈員類別( Person ),包含⾝份證字號 id )、姓名( name )與年齡( age )。 2. 因⾝份證字號( id ),姓名( name )或是年齡( age )都是 完全開放,可以透過指派運算式( = )來改變屬性中的資料的。 3. 對於⼀個女⽣-林⼩美⽽⾔,年齡- age 即是⼀種秘密,此⽅⾯的資 訊是很不想對外透露的,但沒辦法,因為這些屬性都是完全開放存取的。除 了⾝份證字號、姓名屬性可⾃由的取得屬性值外,連年齡屬性也不例外皆可 ⾃由存取。若想保護年齡屬性不被直接存取,怎麼做到呢? J5_1_1 – Main.java J5_1_2 – Person.java J5_1_2 – Main.java private int age show () 2. 在此加入⼀個性別屬性( gender ), 以便之後⽤來辨識男⽣或女⽣。 3. private 代表私有的意思。若將 private 修飾詞加在屬性型別的前 ⾯,年齡( age )屬性將只可由⼈員物件( Person )本體來進⾏存取。 6. 需⾃我介紹⽅法- show() 是定義在物件中的, 因此可 內部 存取⼈員物件本⾝的私有化年齡屬性。 4. 這是在⼈員的⾃我介紹⽅法( show() )中使⽤年齡屬性。這是可以的,因為⽅ 法就是⽤來定義⼈員的⾏為的,因此是屬於⼈員的⼀部份,所以在⼈員類別的⽅法中 是可以存取⾃⾝類別的所有屬性,即便是私有化的屬性也是可以進⾏存取。 5. 這是建立後的⼈員物件。 1. 建立 1 個⼈員物件( Person )。 2. 年齡屬性( age )在類別中已被修飾為 private -私有的。這時若從外部 存取此物件的私有化的年齡屬性,則會發⽣編譯錯誤,編譯器會告訴您此年齡 屬性已私有化,禁⽌存取。⽽私有化即是我們⽤來保護年齡屬性的第 1 步。 5. 若這時想透過句點( . )的⽅式,從 存取年齡屬性,這時會發⽣編譯錯誤,告 訴您年齡屬性是私有化的,不可進⾏存取。 3. 這是建立後的⼈員物件。 4. 私有化的年齡屬性 是保護在物件內的。 private int age ; . age J5_1_3 – Person.java . ⼈員類別( Person )。 2. private 關鍵字也可針對⽅法進⾏私有化。在此為 xShow() ⽅法進⾏私有化,私有化後的⽅法僅可於物件內部使⽤。 private ,年齡屬性私有化 private ,也適⽤於⽅法 ⾚裸裸的⼈員資訊, 那敏感的年齡不就被看到了?! 注意,僅⼈員物件本⾝可存取 私有化的年齡屬性 1 1

留言