1. Java中的訪問控制
可見/訪問性 | 在同一類中 | 同一包中 | 不同包中 | 同一包子類中 | 不同包子類中 |
public | yes | yes | yes | yes | yes |
protected | yes | yes | no | yes | yes |
package | yes | yes | no | yes | no |
private | yes | no | no | no | no |
表1-1
(1) 在java中有public、protected、private三種顯示的修飾符用於控制可見性,package不是顯示的修飾符,它是隱含的,即如果在類、變量等前沒加顯示的可見性修飾符,那它就是package級別的。如果在類的定義中沒有指定package,那么java會把它放在缺省包中,一般來說這個缺省的包就是當前目錄。
(2) 在子類中的方法如果重載了父類的方法,那么該方法的可見級別應更底或者相同,如父類中的方法是public,那么子類中方法必須是public。
(3) 在java中,一般來說,變量成員最好是private,對它們的訪問可以通過public的方法,在這些方法中可以做些控制以保證數據的一致性。這些方法名一般以get和set做為前綴。
2. 包
包名一般為小寫,而類名的第一個字母一般為大寫,這樣在引用時,可以明顯的分辨出包名和類名。如果在類的定義之前沒有使用package定義包名,那么該類就屬於缺省的包。
2.1 Hello Package
首先通過一個簡單的package的定義來學習package的使用:
package testPackage; public class Test { public static void main(String args[]) { mNode node = new mNode(); node.print("hello"); } }
說明:
(1) 使用package關鍵字指明類所在的包;
(2) package語句必須在文件的最前面;
(3) 編譯時可使用javac –d . Test.java自動產生包需要目錄;
(4) 可以使用java testPackage.Test來執行編譯后的代碼;
2.2 包的幾個作用:
(1) 可以更好的組織類,包與文件夾類似,文件夾可以將不同的文件放在同一個文件夾中,而包也可以將不同的類文件放在同一包中;
(2) 減少類名的沖突問題,這也與文件夾類似,同一文件夾中的文件不能重名,不同文件中的文件可以重名,同一包中的類名不能重復,不同包中的類名可以重復;
(3) 對包中的類起了一定的保護作用,詳見java的訪問控制;
2.3 import的使用
(1) 直接引用指定的類,如import java.util.Vector;
(2) 引用一個包中的多個類,如import java.awt.*。更確切的說,它並不是引用java.awt中的所有類,而只引用定義為public的類,並且只引用被代碼引用的類,所以這種引用方法並不會降低程序的性能;
(3) *號代替類名,在不能代替包名,如import java.awt.*,只引用java.awt下的類,而不引用java.awt下的包;
(4) import java.awt.F*,這種使用方法是錯誤的;
(5) import語句在所有類定義之前,在package定義之后;
(6) import只告訴編譯器及解釋器哪里可以找到類、變量、方法的定義,而並沒有將這些定義引入代碼中;
2.4 包中類的使用
有以下幾種機制可以使用包中的類:
(1) 如果要使用的類是屬於java.lang包的,那么可以直接使用類名來引用指定的類,而不需要加上包名,因為包java.lang不用顯示使用import,它是缺省引入的;
(2) 如果要使用的類在其它包(java.lang除外)中,那么可以通過包名加上類名來引用該類,如java.awt.Font
(3) 對於經常要使用的類(該類在其它包中),那么最好使用import引用指定的包,如java.awt.*
(4) 如果import引入的不同的包中包含有相同的類名,那么這些類的使用必須加上包名
(5) 接口也可以屬於某個包,也可以使用import引入其它包中的類和接口