[Java] 8.2. 公開化

在不同套件下,若要互相共享成員(類別、列舉等),則可透過public進行開放。

 

image/svg+xml8.2. 公開化 – public package personMgt ; class Person { String id; String name; String gender; int age; } package others ; class Main { public static void main( String [] args){ personMgt.Person p; } } package personMgt ; public class Person { String id; String name; String gender; int age; } package others ; class MainClass { public static void main( String [] args){ personMgt.Person p; } } package personMgt ; public class Person { public Person (){} public String id ; public String name ; public String gender ; int age ; public int getAge (){ if (gender== " 女⽣ " ) return 18 ; else return age; } public void setAge ( int age){ this .age=age; } public void show (){ System.out.println(id); System.out.println(name); System.out.println(gender); System.out.println(getAge()); } } package others ; class Main { public static void main( String [] args){ personMgt.Person p ; p = new personMgt.Person (); p.id = "k12345678" ; p.name = "Jack" ; p.gender = " 男⽣ " ; p.setAge ( 25 ); p.show (); } } 執⾏結果 K12345678 Jack 男⽣ 25 package others ; import personMgt . Person ; import personMgt . * ; class MainClass { public static void main( String [] args){ Person p; p = new Person (); p.id= "k12345678" ; p.name= "Jack" ; p.gender= " 男⽣ " ; p.setAge( 25 ); p.show(); } } package personMgt.companyMgt ; import personMgt . * ; public class Employee extends Person { public String empID; public int salary; public Employee(){ super (); } } 編譯後的結果 import personMgt . * ; import personMgt.companyMgt . Employee ; class MainClass { public static void main( String [] args){ Person p = new Person (); p.id= "k12345678" ; p.name= "Jack" ; p.gender= " 男⽣ " ; p.setAge( 25 ); Employee e = new Employee (); e.id= "K111222333" ; e.name= "Mary" ; e.gender= " 女⽣ " ; e.setAge( 22 ); e.empID= "01234" ; e.salary= 40000 ; } } J8_2_1 – Person.java J8_2_2 – Person.java 其他套件 others ⼈員管理套件 personMgt MainClass.class Person.class 1. ⼈員類別( Person )位於⼈員管理套件( personMgt )中。 2. MainClass 類別位於 others 套件下。 J8_2_1 – Main.java 3. 此⾏程式無法正確的存取⼈員類別,因為 MainClass 類別與⼈員類別不存在同⼀個套件下。 4. 有沒有辦法可以讓位於不同套件的 MainClass 別,看到並使⽤位於⼈員管理套件的⼈員類別呢? 其他套件 others ⼈員管理套件 personMgt MainClass.class Person.class 1. class 關鍵字前⾯加上 public ,這樣位於 personMgt 套件 下的⼈員類別( Person )就會被公開化了。 2. 這是主類別( MainClass )位於其他套件下( others )。 . 因為 public 的關係所以可以存取到位於⼈員管理明件中的⼈ 員類別,但請記得⼈員類別是位於⼈員管理套件( personMgt )下 的,因此要先指出套件的路徑- personMgt ,然後在以句點( . 的⽅式連結⼈員類別即可使⽤。 4. public 關鍵字讓類別公開化,讓不同 套件下的類別可以看到並使⽤⼈員類別。 J8_2_2 – Main.java 注意,⼀個 java 檔中只能有⼀個 public 的類別,且檔名必須與類別名稱相 同,否則編譯會失敗。這是 java 的限制,⽬的是希望以檔名的⽅式,就可以 知道我們有哪些類別。 J8_2_3 – Person.java 1. ⼈員類別( person )位於⼈員管理套件中 personMgt )。注意,要先使⽤ public 公開化⼈員類別 Person )。之後對建構式、屬性與⽅法的開放才有意義。 2. 建構式使⽤ public 關鍵字進⾏開放。 3. 屬性使⽤ public 關鍵字進⾏開放。 4. 年齡屬性( age )是我們唯⼀沒有開放的屬性。注意, 這也並未使⽤ private 關鍵字進⾏私有化。 5. 年齡屬性的設值式( setAge() )與取值式 getAge() )⽅法,也可以使⽤ public 進⾏公開化。 6. ⾃我介紹⽅法( show() )也使⽤ public 進⾏公開化。 7. 這是主類別( MainClass ),其位於另⼀ 個套件-其他套件中( others )。 8. 因⼈員類別以進⾏公開化,所以可以使⽤。 9. 此建構式因公開化,因此可以使⽤。 J8_2_3 – Main.java 10. 這些屬性也是在公開化後,才可使⽤的。 11. 這些⽅法也是在公開化後使⽤。 J8_2_4 – Main.java 1. 注意,現在是位於其他套件中( others )。 2. 現在使⽤的 import 關鍵字必須出現在 package 與類因之間,⽽且可以擁有⼀個以上的 import 3. import 關鍵字可針對⼈員管理套件 personMgt )下的⼈員類別作引入的動作。 4. import +星號( * )表⽰將以套件為單位,引入套件下的所有類別, 在此引入⼈員管理套件( personMgt )下的所有類別。 5. 因為 import 的關係,之後只要直接使⽤ “Person” 這個類別名稱,即表⽰要使⽤⼈員 管理套件( personMgt )下的⼈員類別( Person ),這就是 import 關鍵字的功能,其是 ⽤來指向某個套件的類別,在使⽤時即可忽略套件路徑,直接以類別名稱即可使⽤類別。 J8_2_5 – Employee.java C:\ Employee.class personMgt companyMgt 1. 套件的路徑是可以以句點( . )的⽅式來表⽰⼦路徑。就像公司管理套件( companyMgt 的路徑,其透過句點,讓公司管理套件成⼈⼈員管理套件( personMgt )的⼦套件,完整的公 司管理套件路徑即是 “personMgt.companyMgt” 2. import ⼈員管理套件的路徑,為的就要使⽤⼈員類別( Person )。記 住,套件只要是路徑不同就是不相同的套件,雖然有可能套件的路徑會包含跟 ⼀個套件的路徑。但它們還是獨立的套件,因此要分別引⽤,例如 “personMgt” “personMgt.companyMgt” 即是不同的套件路徑。 3. 這是員⼯類別檔( Employee ),它繼承⾃⼈員類別。 4. 這兩個⽬錄是公司管 理套件( companyMgt 的⽬錄的結構,也是套件 的路徑,記住,它們是⼀ 組的。 5. 您的員⼯類別檔 Employee )是位於這裡。 J8_2_5 – Main.java 2. 注意,公司管理套件( companyMgt )還是要使⽤ import 關鍵 字引⽤,不可因為員⼯管理套件引⽤下其下所有類別,就以為其會同 時引⽤⼦套件路徑-公司套件下的所有類別。原因很簡因,只要是套 件,它們都是分別獨立的因此皆要使⽤ import 關鍵字引⽤。只引⽤ 公司管理套件( companyMgt )下的員⼯類別( Employee )。 1. 引⽤⼈員管理套件( personMgt )下的所 有類別,其中包含⼈員類別( Person )。 3. 在引⽤後,我們可使⽤⼈員管理套件下的⼈員類別。 4. 使⽤公司管理套件下的員⼯類別。 有沒有辦法開放⼈員類別的使⽤權限, 讓不同套件下的類別也可以存取到⼈員類別? 1 步, public 開放⼈員類別 2 步, public 開放⼈員類別的建構式、屬性與⽅法 import ⼈員類別,告別昂長的套件路徑 句點( . ),創立公司管理⼦套件 ⼈員管理套件和公司管理套件是分別獨立的

留言