java修飾符的解析

巴扎黑
發布: 2016-11-26 09:14:07
原創
1690 人瀏覽過

各位看客,今天我們來討論關於java中存取修飾符的相關問題,這也是面試的常見問題。 
簡單來說,存取修飾符是程式碼的書寫者為了區分何時可存取程式碼,什麼時候不能存取程式碼而生的。 java裡面存取限制分為友善(即所謂的預設型),public,private,protected四類。 
今天我們來看看其中比較難區分的兩大類,即友善型和protected。 
先來看友善型,friendly。當我們在成員前面什麼修飾符都不加時,則該成員的訪問級別就為默認級別,那麼此時,與該class在同一個包下的其他的class可訪問這些成員,而不同包下的class則無法存取這些成員,如下: 

Java代碼  

package com.a1;  

/** 

 * A屬於 com.a1 這個包 

 * @author Will 

 * 

 */  🠎.

    int i;  

    String str;  

    void print(){  

      }  

}  

Java代碼

package com.a1;  


/** 

 * testA1屬於com.a1 

 * @author Will 

 * 

 */  

public class testA1 {  

        //由於testA1與A屬於同一個包下,所以可以存取友善的成員  

        A a=new A();  

        println(a.str);  

        a.print();  

    }  

}  

Java代碼  

package com.b1 .  

/** 

 * testA2屬於com.b1 


 *  

 * @author Will 

 *  * @author Will 

 *  */  

public class testA2 {  

public static void main(String[] args) {  

        // 由於testA2與A不屬於同一個包子

        A a = new A( );  

        //System.out.println(a.i);  

        a.print();  

    }  

}  

當然,各位看官可能會碰到一種情況,就是在未指定package 的時候,不同資料夾內的class檔案可以互相呼叫其友善成員,原因則在於未指定套件時,所有檔案預設屬於預設包,故而可以互相調用友好型成員。 

接著,我們來看看protected類型。這種類型與友善型(即預設型)很相似,唯一差異體現在繼承上面。簡單來說,只要class檔案不屬於同一個套件內(包含繼承情況),其他的class檔案都無法存取友善的成員;但class繼承的時候,不論是否屬於同一個套件內,在繼承情況下,子類別可以存取父類別的protected成員。

Java代碼  

package com.a1;  

/** 

 * A屬於 com.a1 這個包 

 * i,str為友善 

 * j,str 🠎型🜠

 * j,str 型**/  

public class  str;  

    protected int j;  

    protected String str1;

    public A(){  

          

    }    System.out.println("i:"+i+";str:"+str);  

    }  

      print(int k){  

        System.out.println("j:"+j+";str1:"+str1);  

Java代碼  

package com.a1 ;  

/** 

 * testA1屬於com.a1 

 * @author Will 

 * 

 */  

public class testA1 {  

    public static void main(String[] test    public static vo與A屬於同一個包下,所以可以訪問友好型的成員  

        //也可使用protected類型成員  

        A a=new A();       A a=new A();       A a=new A();    

        System.out.println(a.str);  

        System.out .println(a.j);  

        System.out.println(a.str1);  

        

    }  

}  

Java程式碼

package com.b1;  

  

import org.junit.Test;  

  🠎 A extends A{  

    @Test  

    public void test() {  


        ExtendsA extendsA=new ExtendsA();  

       友善會員  

        //去掉註解會錯誤化  

        //System.out .println(extendsA.i);  

        //System.out.println(extendsA.str);  

       

        //當不再同一個包且繼承情況下,可呼叫父類protected型會員  

        System.out.println(extendsA.j);  

        extendsA.print(1);  

    }  

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!