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

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

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

    NewMoring

    與Java同路,贏在未來(lái)。

    統(tǒng)計(jì)

    積分與排名

    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

    最新評(píng)論

    java中protected

    1. protected 訪問(wèn)控制符能被用于方法和成員變量。
        2. 聲明為protected的方法和成員變量能被同一個(gè)包里的所有類所訪問(wèn),就像默認(rèn)修飾符package一樣。
        3. 能被該類的子類所訪問(wèn),子類可以和父類不在一個(gè)包中。
        這樣,當(dāng)你想讓一個(gè)類中的某個(gè)方法或成員變量在包中都可見(jiàn),而且其子類也能訪問(wèn)(子類有可能和父類不在同一個(gè)包中)但又不想讓所有類都可以訪問(wèn)該類時(shí),就可以用protected修飾符。
        可訪問(wèn)性:
        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.

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


    下面的程序并不用于運(yùn)行,因?yàn)樵L問(wèn)控制在編譯期間就要確定,我們只需編譯下述文件,看是否能通過(guò)。在編譯下述文件前,先想想能不能編譯通過(guò)?

    //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){
      //在子類中直接訪問(wèn)父類中的protected變量
      nFeathers=duck1n;
     }
    }
    //Duck2.java------------------------------ 
    package duckpack;

    import birdpack.Bird;

    public class Duck2 extends Bird{

     public void construct(int newduck2){
      Duck2 d2 = new Duck2();
      //在子類中通過(guò)子類的對(duì)象訪問(wèn)父類中的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();
      //子類中用父類對(duì)象反而不能訪問(wèn)父類中的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();
      //子類中用另外一個(gè)子類的對(duì)象也不能訪問(wèn)父類中的protected變量
      d1.nFeathers=swan;
     }
    }

    編譯上述幾個(gè)文件,后2個(gè)不能通過(guò)。編譯器提示:
    " 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){
      //在子類中直接訪問(wèn)父類中的protected變量
      nFeathers=duck1n;
     }
    }
    //Duck2.java------------------------------ 
    package duckpack;

    import birdpack.Bird;

    public class Duck2 extends Bird{

     public void construct(int newduck2){
      Duck2 d2 = new Duck2();
      //在子類中通過(guò)子類的對(duì)象訪問(wèn)父類中的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();
      //子類中用父類對(duì)象反而不能訪問(wèn)父類中的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();
      //子類中用另外一個(gè)子類的對(duì)象也不能訪問(wèn)父類中的protected變量
      d1.nFeathers=swan;
     }
    }

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

    第4點(diǎn)說(shuō)明,就算在子類中,也只能通過(guò)子類(或子類的子類)的引用來(lái)訪問(wèn)父類中的protected方法和成員變量。
    在Duck3和Swan兩個(gè)子類中,直接通過(guò)父類和另一個(gè)子類來(lái)訪問(wèn)父類中的protected方法和成員變量就不行。

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

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


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲国产中文在线视频| 97国免费在线视频| 2021在线永久免费视频| 亚洲国产精品嫩草影院在线观看| 一级黄色毛片免费看| 国产亚洲精品不卡在线| 国产免费黄色无码视频| 亚洲国产一成人久久精品| 国产一区二区三区免费观看在线| 亚洲精品午夜无码电影网| 中文字幕乱码系列免费| 亚洲AV综合色区无码一区爱AV| 免费国产99久久久香蕉| 亚洲精品视频免费看| 欧洲乱码伦视频免费| 麻豆亚洲AV成人无码久久精品 | 亚洲成在人线aⅴ免费毛片| 国产区卡一卡二卡三乱码免费| jzzijzzij在线观看亚洲熟妇| 亚洲国产精品国产自在在线| 久久不见久久见免费影院www日本| 国产亚洲免费的视频看| 免费无码VA一区二区三区| 亚洲制服丝袜一区二区三区| 女人被免费视频网站| eeuss影院免费92242部| 亚洲最新视频在线观看| 日韩一区二区三区免费体验| 久久www免费人成看国产片| 麻豆亚洲AV永久无码精品久久| 无码视频免费一区二三区| 成a人片亚洲日本久久| 亚洲乱码中文字幕综合| 一级女人18毛片免费| 无遮挡国产高潮视频免费观看| 国产∨亚洲V天堂无码久久久| 黄页网站在线观看免费高清| 人妻仑刮八A级毛片免费看| 亚洲欧洲国产精品你懂的| 国产成人精品免费直播| 野花香在线视频免费观看大全 |