<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    NewMoring

    與Java同路,贏在未來。

    統計

    積分與排名

    http://bbs.javawind.net/index.jspx

    http://www.chubeibao.com/bbs/index.php

    http://www.java2000.net/

    http://www.javaeye.com/

    http://www.javathinker.org/index.jsp

    http://www.programbbs.com/bbs/index.asp

    最新評論

    java中protected

    1. protected 訪問控制符能被用于方法和成員變量。
        2. 聲明為protected的方法和成員變量能被同一個包里的所有類所訪問,就像默認修飾符package一樣。
        3. 能被該類的子類所訪問,子類可以和父類不在一個包中。
        這樣,當你想讓一個類中的某個方法或成員變量在包中都可見,而且其子類也能訪問(子類有可能和父類不在同一個包中)但又不想讓所有類都可以訪問該類時,就可以用protected修飾符。
        可訪問性:
        public > protected > package >private

        注意:
        4. But a subclass in another package can access the protected members in the super-class via only the references of subclass or its subclasses. A subclass in the same package doesn’t have this restriction. This ensures that classes from other packages are accessing only the members that are part of their inheritance hierarchy.

       
        下面的例子可以說明上述幾點:(特別注意第4點)
        我們將創建一個父類Bird.java,放在birdpack包中,父類中有一個protected int的成員變量nFeathers;
        再分別創建4個Bird類的子類Duck1.java,Duck2.java,Duck3.java,Swan.java,放在duckpack包中,通過在每個子類中調用nFeathers的不同方法說明上述幾點


    下面的程序并不用于運行,因為訪問控制在編譯期間就要確定,我們只需編譯下述文件,看是否能通過。在編譯下述文件前,先想想能不能編譯通過?

    //Bird.java------------------------------
    package birdpack;

    public class Bird{
     protected int nFeathers;
     
    }

    //Duck1.java-----------------------------
    package duckpack;

    import birdpack.Bird;

    public class Duck1 extends Bird{
     public void setn(int duck1n){
      //在子類中直接訪問父類中的protected變量
      nFeathers=duck1n;
     }
    }
    //Duck2.java------------------------------ 
    package duckpack;

    import birdpack.Bird;

    public class Duck2 extends Bird{

     public void construct(int newduck2){
      Duck2 d2 = new Duck2();
      //在子類中通過子類的對象訪問父類中的protected變量
      d2.nFeathers=newduck2;
     }
    }

    //Duck3.java------------------------------
    package duckpack;

    import birdpack.Bird;

    public class Duck3 extends Bird{

     public void construct(int newduck3){
      Bird b = new Bird();
      //子類中用父類對象反而不能訪問父類中的protected變量
      b.nFeathers=newduck3;
     }
    }

    //Swan.java--------------------------------
    package duckpack;

    import birdpack.Bird;

    public class Swan extends Bird{

     public void construct(int swan){
      Duck1 d1 = new Duck1();
      //子類中用另外一個子類的對象也不能訪問父類中的protected變量
      d1.nFeathers=swan;
     }
    }

    編譯上述幾個文件,后2個不能通過。編譯器提示:
    " nFeathers has protected access in birdpack.Bird"。

     

    //Bird.java------------------------------
    package birdpack;

    public class Bird{
     protected int nFeathers;
     
    }

    //Duck1.java-----------------------------
    package duckpack;

    import birdpack.Bird;

    public class Duck1 extends Bird{
     public void setn(int duck1n){
      //在子類中直接訪問父類中的protected變量
      nFeathers=duck1n;
     }
    }
    //Duck2.java------------------------------ 
    package duckpack;

    import birdpack.Bird;

    public class Duck2 extends Bird{

     public void construct(int newduck2){
      Duck2 d2 = new Duck2();
      //在子類中通過子類的對象訪問父類中的protected變量
      d2.nFeathers=newduck2;
     }
    }

    //Duck3.java------------------------------
    package duckpack;

    import birdpack.Bird;

    public class Duck3 extends Bird{

     public void construct(int newduck3){
      Bird b = new Bird();
      //子類中用父類對象反而不能訪問父類中的protected變量
      b.nFeathers=newduck3;
     }
    }

    //Swan.java--------------------------------
    package duckpack;

    import birdpack.Bird;

    public class Swan extends Bird{

     public void construct(int swan){
      Duck1 d1 = new Duck1();
      //子類中用另外一個子類的對象也不能訪問父類中的protected變量
      d1.nFeathers=swan;
     }
    }

    編譯上述幾個文件,后2個不能通過。編譯器提示:
    " nFeathers has protected access in birdpack.Bird"。

    第4點說明,就算在子類中,也只能通過子類(或子類的子類)的引用來訪問父類中的protected方法和成員變量。
    在Duck3和Swan兩個子類中,直接通過父類和另一個子類來訪問父類中的protected方法和成員變量就不行。

    附:編譯技巧
    當編譯含有包聲明的源文件時,使用 -d 選項會帶來很多方便,它能保證編譯后的class文件存放在正確的目錄路徑下。
    我們可以把上述5個文件都放在protectedtest目錄下,然后用 -d 選項去編譯:
    javac -d . Bird.java
    javac -d . Duck1.java
    .....
    其中.表示以當前目錄創建包結構的目錄層次。編譯成功后,會在protectedtest下生成2個目錄:birdpack和duckpack,里面是生成的class文件。
     

    posted on 2009-04-26 20:12 清晨 閱讀(2463) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲中文字幕无码爆乳app| 亚洲精品高清视频| 人妻丰满熟妇无码区免费| 亚洲综合国产精品第一页 | 亚洲乱码无限2021芒果| 1000部拍拍拍18勿入免费视频软件| 亚洲成AV人在线观看天堂无码| 花蝴蝶免费视频在线观看高清版 | 无人视频免费观看免费视频 | 日韩免费无码一区二区视频| 一本色道久久综合亚洲精品| 一级一看免费完整版毛片| 最新国产AV无码专区亚洲| 久99久精品免费视频热77| 亚洲国产精品第一区二区| 国产在线jyzzjyzz免费麻豆| 亚洲一区二区三区免费在线观看| 最近中文字幕无免费视频| 激情小说亚洲图片| 久久亚洲国产成人影院网站 | 日韩中文字幕免费| 一二三区免费视频| 久久久久亚洲Av片无码v| 成人免费毛片内射美女-百度| 亚洲日本VA午夜在线电影| 亚洲精品动漫人成3d在线| 青柠影视在线观看免费高清| 亚洲美女一区二区三区| 日本免费福利视频| 成人国产精品免费视频| 亚洲大片免费观看| vvvv99日韩精品亚洲| 无码精品国产一区二区三区免费| 亚洲综合av一区二区三区不卡| 亚洲AV无码一区二区三区在线观看| 亚洲乱码无人区卡1卡2卡3| 亚洲中文字幕成人在线| 在线观看免费人成视频色| 一级毛片免费在线观看网站| 久久精品亚洲综合专区| 四虎影院在线免费播放|