章節5、2-Package包和權限修飾符

1、Package包java

爲了更好的組織類,java提供了包機制,用於區別類名的命名空間。eclipse

包的做用:ide

一、把功能類似或相關的類或接口組織在同一個包中,方便類的查找和使用。函數

二、如同文件夾同樣,包也採用了樹形目錄的存儲方式。同一個包中的類名字是不一樣的,不一樣的包中的類名字是能夠相同的,當同時調用兩個不一樣包中相同類名的類時,應該加上包名以此來區別。所以,包能夠避免名字衝突。this

三、包也限定了訪問權限,擁有包訪問權限的類才能訪問某個包中的類。spa

java中使用包這種機制是爲了防止命名衝突,訪問控制,提供搜索和定位類、接口、枚舉、和註釋等。code

 

2、在eclipse中怎麼建立包對象

找到須要建立包的java項目---》右鍵選擇new---》Package---》給包命名(命名規則回顧第二章)---》finishblog

此處建立一個名爲automibile的包:繼承

 

而後咱們introduction7包中建立一個BMW的類(每一個類中的第一行都註明了該類所屬包名):

 

3、權限修飾符

 

做用:用於控制被修飾變量、方法、類的可見範圍。

public訪問級別最高,起次是protected、默認、私有。

一、將前面(之前的章節)建立的Cars類和BMW類移動到automibile包中

二、在新建的automibile包中建立一個名爲AccessModifierDome的類,在該類中new一個Cars對象,new完後可能會報錯,這是由於在上一節中演示繼承時在構造方法中添加了一個參數,因此此處必須在Cars類中寫一個默認無參的構造函數(若是未出現此問題能夠忽略):

三、默認:new了一個Cars對象後,調用Cars類中的變量speed,該變量權限修飾符爲默認的,由於在同一個包中因此可以調用成功。(大家能夠將該類移到到其它包中而後再調用該變量,會發現程序報錯,出現此緣由是由於變量的默認權限只能在同一個包中才能被訪問,若是跨包訪問,程序就會報錯)

四、私有:在Cars類中從新聲明一個整形變量,權限爲私有

package automibile; public class Cars { int speed; private int privateSpeed; public Cars() { this(0); } //建立一個構造方法
    public Cars(int startSpeed) { speed = startSpeed; } //建立一個名爲increaseSpeed的方法
    public void increaseSpeed() { speed++; System.out.println("cars 類的加速。。。"); } //建立一個名爲idcreaseSpeed的方法
    public void idecreaseSpeed() { speed--; System.out.println("cars 類的減速。。。"); } }

而後咱們去AccessModifierDome類中調用這個變量,顯示調用不成功,程序報錯,由於被private修飾的變量只能在同一個類中被訪問,

若是須要對提供訪問,能夠使用get和set方法,在Cars類中添加以下代碼:

package automibile; import java.util.Set; public class Cars { int speed; private int privateSpeed; public Cars() { this(0); } public void setprivateSpeed(int privateSpeed) { this.privateSpeed = privateSpeed; } public int getprivateSpeed() { return privateSpeed; } //建立一個構造方法
    public Cars(int startSpeed) { speed = startSpeed; } //建立一個名爲increaseSpeed的方法
    public void increaseSpeed() { speed++; System.out.println("cars 類的加速。。。"); } //建立一個名爲idcreaseSpeed的方法
    public void idecreaseSpeed() { speed--; System.out.println("cars 類的減速。。。"); } }

在AccessModifierDome類中調用:

package automibile; public class AccessModifierDome { public static void main(String[] args) { Cars c1 = new Cars(); c1.speed = 10; c1.setprivateSpeed(20); System.out.println(c1.getprivateSpeed()); } }

打印結果爲:20

五、public公共權限:只要導入了這個包和這個類,在任何其它類中均能訪問。

六、protected受保護權限:在Cars中定義一個該類型的變量,將decreaseSpeed方法權限改成私有權限,

 

咱們先在同一個包中的AccessModifierDome類調用,查看是否能調用成功,

 

而後咱們打開包名爲introduction7中的InheritanceDemo類,而後調用Cars類中的變量和方法,查看調用是否成功,

接下來咱們在繼承了Cars類的BMW類中調用(Cars類和BMW在同一個包中),經過實例化和直接調用兩種方式查看調用是否成功,

而後咱們在一樣繼承了Cars的Demo類中(Demo屬於包名爲introduction7中),經過一樣的兩種方式查看調用是否成功,

總結:受保護權限的變量或只有如下幾種方式能被成功調用

一、同包同類

二、同包不一樣類

三、同包不一樣類時,調用者和非調用者存在繼承關係時,只能直接訪問,不能在實例化對象後訪問

相關文章
相關標籤/搜索