package package ppt Test java import java util































![可見度總結 Mytools. txt 套件 public class A public class B private char[] text; 彼此可看見 可見度總結 Mytools. txt 套件 public class A public class B private char[] text; 彼此可看見](https://slidetodoc.com/presentation_image_h2/c5fd349eacc686c0888d5b7d3d510651/image-32.jpg)
- Slides: 32
package: 程式庫單元 <<package. ppt>>
// Test. java import java. util. *; public class Test { public static void main(String[] args) { Array. List a = new Array. List(); } } 3
Import (匯入) 程式庫 import java. util. *; 取用 package,在此即將 Java 標準公用程式庫整 個引入。 import java. util. Array. List; 引入單一 class – Array. List。 4
. java 檔的邏輯意義 package public class. java file Non-public class 7
// mypackage: Vector. java // Creating a package mypackage; public class Stack { public Stack(){ System. out. println(“mypackage. Stack"); } } package mypackage; 便會讓此編譯單元成為 mypackage 程式庫中的一部份。 8
此 Vector class 的引用方式: 完整名稱 mypackage. Stack v = new mypackage. Stack(); 使用關鍵字 import mypackage. *; //. . . Stack v = new Stack(); 9
// com: uu: mypackage: Vector. java package com. uu. mypackage; public class Vector { public Vector(){ System. out. println(“mypackage. Vector"); } } // com: uu: mypackage: List. java package com. uu. mypackage; public class List { public List() { System. out. println(“mypackag e. List"); } } 12
上述的 Vector. java 和 List. java 編譯後的. class 檔置 於下列目錄: C: Java. Codecomuumypackage CLASSPATH 環境變數設定如下: CLASSPATH=. ; C: Java. Code; C: j 2 sdk 1. 4. 2jrelibrt. jar 14
妥善設定 CLASSPATH 之後,以下程式檔可置於任何 目錄之下而被編譯成功: // Lib. Test. java // Uses the library. import com. uu. mypackage. *; public class Lib. Test { public static void main(String[] args) { Vector v = new Vector(); List l = new List(); } } 15
衝突 import com. uu. mypackage. *; import java. util. *; 由於 java. util. * 也含有 Vector class,如果你現 在嘗試產生一個 Vector,便會引發衝突,編譯器不 知你要產生那個 Vector: Vector v = new Vector(); 如欲使用的是標準的 Java Vector,要指出其名稱, 如下: java. util. Vector v = new java. util. Vector(); 16
類別的可見度圖例 Mytools. txt 套件 套件外可看見 class Text. Component public class Text. Editor 套件外可看見 public class Text. Area extends Text. Component 19
Field 和 Method 的可見度 Java 存取權限飾詞 public、protected、private 應 該置於 class 內的每個 member 定義之前,無論此 member 是 field 或是 method。 private 預設 (無修飾字) public protected 20
// Ice. Cream. java // Demonstrates “private” keyword. class Sundae { private Sundae() {} static Sundae make. Sundae() { return new Sundae(); } } public class Ice. Cream { public static void main (String[] args) { Sundae error = new Sundae(); // compile error! Sundae right = Sundae. make. Sundae(); } } 22
friendly (無修飾字) 同一 package 內的其他所有 classes,都可以存 取 friendly member,但對於 package 以外的 classes 則形同 private。 friendly 存取權限又稱為 package 存取權限。 23
default package // c 05: Pie. java public class Pie { void f() { System. out. println("Pie. f()"); } } // c 05: Cake. java class Cake { public static void main(String[] args) { Pie x = new Pie(); x. f(); } } 這兩個檔案在同一目錄,Java 會自動將這兩個檔案視為隸屬於該 目錄的所謂 default package 中,因此對同目錄下的所有檔案來 說,它們都是 friendly。 24
//: c 05: dessert: Cookie. java package c 05. dessert; public class Cookie { void bite() { System. out. println("bite"); } } ///: ~ //: c 05: Dinner. java // Uses the library. import c 05. dessert. *; public class Dinner { public static void main(String[] args) { Cookie x = new Cookie(); x. bite(); // compile error! } } ///: ~ 25
檔案結構如下圖所示: 編譯方式 c: Java. Testjavac c 05Dinner. java 執行方式 c: Java. Testjava -cp. ; c 05 Dinner 設定 classpath 26
//: c 05: dessert: Cookie. java package c 05. dessert; public class Cookie { void bite() { System. out. println("bite"); } } //: c 05: Chocolate. Chip. java import c 05. dessert. *; public class Chocolate. Chip extends Cookie { public static void main(String[] args) { Chocolate. Chip x = new Chocolate. Chip(); x. bite(); // compile error! } } 29
//: c 05: dessert: Cookie. java package c 05. dessert; public class Cookie { protected void bite() { System. out. println("bite"); } } //: c 05: Chocolate. Chip. java import c 05. dessert. *; public class Chocolate. Chip extends Cookie { public static void main(String[] args) { Chocolate. Chip x = new Chocolate. Chip(); x. bite(); // It’s right! } } 30
//: c 05: Chocolate. Chip. java import c 05. dessert. *; public class Chocolate. Chip extends Cookie { public static void main(String[] args) { Chocolate. Chip x = new Chocolate. Chip(); x. bite(); // It’s right! } } //: c 05: Dinner 2. java public class Dinner 2 { public static void main(String[] args) { Chocolate. Chip x = new Chocolate. Chip(); x. bite(); // compile error! } } 31
可見度總結 Mytools. txt 套件 public class A public class B private char[] text; 彼此可看見 int linecount; // 預設的可見度 protected void format. Text(); class D 彼此可看見 public void get. Text(); 套件外可看見 public class C extends A 32