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

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

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

    和風(fēng)細(xì)雨

    世上本無(wú)難事,心以為難,斯乃真難。茍不存一難之見(jiàn)于心,則運(yùn)用之術(shù)自出。

    私有的成員能被子類(lèi)繼承嗎?

    如果你的答案是斬釘截鐵的"不能",那么請(qǐng)你繼續(xù)向下看,說(shuō)不定這篇文章能對(duì)你有所用處.

    首先請(qǐng)看兩個(gè)類(lèi)的代碼:
    BaseClass:
    package com.sitinspring;

    import java.util.Vector;

    /**
     * 基類(lèi)BaseClass,ChildClass類(lèi)的父類(lèi)
     * 
    @author: sitinspring(junglesong@gmail.com)
     * @date: 2007-12-4
     
    */
    public class BaseClass{
        
    // 私有動(dòng)態(tài)數(shù)組成員,注意它是"private"的
        private Vector objects;
        
        
    /**
         * 在構(gòu)造函數(shù)
         *
         
    */
        
    public BaseClass(){
            objects
    =new Vector();
        }
        
        
    /**
         * 公有函數(shù),向動(dòng)態(tài)數(shù)組成員objects添加字符串
         * 
    @param str
         
    */
        @SuppressWarnings(
    "unchecked")
        
    public void addStr2Obs(String str){
            objects.add(str);
        }
        
        
    /**
         * 公有函數(shù),打印objects中的諸元素
         *
         
    */
        
    public void printAll(){
            
    for(int i=0;i<objects.size();i++){
                System.out.println(
    "序號(hào)="+i+"\t元素="+objects.get(i));
            }
        }
    }

    ChildClass,BaseClass的派生類(lèi):
    package com.sitinspring;

    /**
     * ChildClass,BaseClass的派生類(lèi)
     * 
    @author: sitinspring(junglesong@gmail.com)
     * @date: 2007-12-4
     
    */
    public class ChildClass extends BaseClass{
        
    public void printObjects(){
            
    // 下面的句子是不能編譯通過(guò)的
            /*for(int i=0;i<objects.size();i++){
                System.out.println("序號(hào)="+i+"\t元素="+objects.get(i));
            }
    */
        }
        
        
    public static void main(String[] args){
            ChildClass childClass
    =new ChildClass();
            
            childClass.addStr2Obs(
    "Hello");
            childClass.addStr2Obs(
    "World");
            childClass.addStr2Obs(
    "China");
            childClass.addStr2Obs(
    "sitinspring");
            
            childClass.printAll();
        }
    }

    再讓我們把斷點(diǎn)停在main函數(shù)中的childClass.printAll()上,看看實(shí)例childClass中到底有什么.


    以上截圖證明:objects確實(shí)是ChildClass類(lèi)實(shí)例childClass的成員,而且四個(gè)字符串也都被加進(jìn)去了.

    最后執(zhí)行出來(lái),結(jié)果如下:
    序號(hào)=0    元素=Hello
    序號(hào)
    =1    元素=World
    序號(hào)
    =2    元素=China
    序號(hào)
    =3    元素=sitinspring

    這也說(shuō)明,上面紅字部分的論斷是正確的.

    再翻看書(shū)籍,關(guān)于private限制的成員變量是這樣寫(xiě)的:
    private  只允許來(lái)自改類(lèi)內(nèi)部的方法訪問(wèn).不允許任何來(lái)自該類(lèi)外部的訪問(wèn).

    我們上面添字符串和遍歷輸出函數(shù)都是BaseClass的成員,所以它當(dāng)然被這兩個(gè)函數(shù)訪問(wèn).而ChildClass的printObjects是BaseClass類(lèi)外部的函數(shù),結(jié)果當(dāng)然是編譯也不能通過(guò).

    實(shí)際上,private,public,protected和繼承沒(méi)有關(guān)系,他們對(duì)成員函數(shù)和變量的限制只是在成員的可見(jiàn)性上,
    public允許來(lái)自任何類(lèi)的訪問(wèn);
    private只允許來(lái)自改類(lèi)內(nèi)部的方法訪問(wèn),不允許任何來(lái)自該類(lèi)外部的訪問(wèn);
    protected允許來(lái)自同一包中的任何類(lèi)以及改類(lèi)的任何地方的任何子類(lèi)的方法訪問(wèn).


    而關(guān)于成員變量的繼承,父類(lèi)的任何成員變量都是會(huì)被子類(lèi)繼承下去的,私有的objects就是明證,這些繼承下來(lái)的私有成員雖對(duì)子類(lèi)來(lái)說(shuō)不可見(jiàn),但子類(lèi)仍然可以用父類(lèi)的函數(shù)操作他們.

    這樣的設(shè)計(jì)有何意義呢?我們可以用這個(gè)方法將我們的成員保護(hù)得更好,讓子類(lèi)的設(shè)計(jì)者也只能通過(guò)父類(lèi)指定的方法修改父類(lèi)的私有成員,這樣將能把類(lèi)保護(hù)得更好,這對(duì)一個(gè)完整的繼承體系是尤為可貴的. jdk源碼就有這樣的例子,java.util.Observable就是這樣設(shè)計(jì)的.

    本文例子下載:
    http://www.tkk7.com/Files/sitinspring/PrivatePuzzle20071204210542.rar

    posted on 2008-02-22 10:29 和風(fēng)細(xì)雨 閱讀(305) 評(píng)論(0)  編輯  收藏


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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 四色在线精品免费观看| 亚洲国产a∨无码中文777| 无码免费又爽又高潮喷水的视频 | a毛片基地免费全部视频| 亚洲狠狠色丁香婷婷综合| 在线观看午夜亚洲一区| 我们的2018在线观看免费高清| 天天综合亚洲色在线精品| 亚洲AV日韩AV永久无码免下载| 免费看又爽又黄禁片视频1000| A毛片毛片看免费| 亚洲偷自拍另类图片二区| 亚洲人成77777在线播放网站| 无码日韩精品一区二区免费| 好猛好深好爽好硬免费视频| 亚洲人AV在线无码影院观看| 亚洲Av无码精品色午夜| 国产免费变态视频网址网站| 国产福利视精品永久免费| 久久久久国色AV免费观看| 亚洲欧美日韩中文二区| 亚洲视频在线观看不卡| 亚洲精品尤物yw在线影院| 免费看国产成年无码AV片| 国产无遮挡裸体免费视频在线观看| 久久精品国产亚洲AV| 亚洲最大成人网色香蕉| 亚洲成在人线av| 亚洲精品人成无码中文毛片| 成年人免费网站在线观看| 亚欧免费一级毛片| 黄床大片免费30分钟国产精品| 亚洲色大成网站www永久男同| 久久精品国产亚洲av高清漫画| 亚洲av成人一区二区三区在线观看 | 四虎影院免费视频| 国产人成免费视频网站| 免费在线观看一级片| 国产精品小视频免费无限app| 香蕉视频亚洲一级| 亚洲另类自拍丝袜第五页 |