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

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

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

    Atea - Hero's Grave

    面向?qū)ο螅_源,框架,敏捷,云計(jì)算,NoSQL,商業(yè)智能,編程思想。

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      40 隨筆 :: 0 文章 :: 28 評論 :: 0 Trackbacks
    以下幾段代碼,運(yùn)行結(jié)果分別是什么?

    code1:
    class Sub extends Super{
        
    public void f() {System.out.println("Sub's public f()");}    
    }
    public class Super{
        
    public void f() {System.out.println("Super's public f()");}    
        
    public static void main(String[] args){
            Super po 
    = new Sub();
            po.f();
        }
    }

    code2:
    class Sub extends Super{
        
    private void f() {System.out.println("Sub's private f()");}    
    }
    public class Super{
        
    public void f() {System.out.println("Super's public f()");}    
        
    public static void main(String[] args){
            Super po 
    = new Sub();
            po.f();
        }
    }

    code3:
    class Sub extends Super{
        
    public void f() {System.out.println("Sub's public f()");}    
    }
    public class Super{
        
    private void f() {System.out.println("Super's private f()");}    
        
    public static void main(String[] args){
            Super po 
    = new Sub();
            po.f();
        }
    }

    code4:
    class Sub extends Super{
        
    private void f() {System.out.println("Sub's private f()");}    
    }
    public class Super{
        
    private void f() {System.out.println("Super's public f()");}    
        
    public static void main(String[] args){
            Super po 
    = new Sub();
            po.f();
        }
    }

    答案:
    code1: Sub's public f()
    code2: Compiled error
    code3: Super's private f()
    code4: Super's public f()

    說明:
    這個(gè)問題困擾了我很久。
    通過以往的學(xué)習(xí)我知道Super po = new Sub()的時(shí)候"Method is Sub's,Field is Super's"。但碰上域限定符時(shí)就又糊涂了。顯然是知其然不知其所以然。
    而當(dāng)我用"javap -verbose"調(diào)試并分析日志的時(shí)候,我終于明白了:>

    javap -verbose Super
      Constant pool:
    const #5 = class        #27;    //  Sub
    const #6 = Method       #5.#21//  Sub."<init>":()V
    const #7 = Method       #10.#28;        //  Super.f:()V
    public static void main(java.lang.String[]);
      Code:
       Stack
    =2, Locals=2, Args_size=1
       
    0:   new     #5//class Sub
       3:   dup
       
    4:   invokespecial   #6//Method Sub."<init>":()V
       7:   astore_1
       
    8:   aload_1
       
    9:   invokevirtual   #7//Method f:()V

    由此可見,不管是哪種情況(code1,3-4),po.f()都會(huì)無條件先調(diào)用Super.f()。
    此時(shí)據(jù)我估計(jì),JVM會(huì)去Sub中尋找可訪問的相同修飾符的函數(shù)。如果找到則用其替代Super.f()運(yùn)行。
    而成員變量不存在這種機(jī)制。
    posted on 2008-07-22 17:32 Atea 閱讀(355) 評論(0)  編輯  收藏 所屬分類: Java language
    主站蜘蛛池模板: 国产成+人+综合+亚洲专| 91久久亚洲国产成人精品性色| 亚洲日韩国产二区无码| 国产精品久久免费| 亚洲日产2021三区| 免费精品人在线二线三线区别| 亚洲图片校园春色| 永久免费毛片在线播放 | 亚洲国产成人片在线观看无码| 国产人成网在线播放VA免费| 国产亚洲精品一品区99热| 中文字幕一区二区免费| 亚洲激情在线视频| 国产成人免费午夜在线观看| 亚洲国产午夜精品理论片| 免费H网站在线观看的| 亚洲国产精品无码久久| 一区二区三区亚洲视频| 亚洲阿v天堂在线2017免费| 亚洲人成77777在线播放网站| 日韩插啊免费视频在线观看 | 在线观看永久免费| 亚洲精品美女网站| 免费一级e一片在线播放| yellow免费网站| 久久综合日韩亚洲精品色| 97人伦色伦成人免费视频| 国产精品亚洲а∨无码播放不卡| 爱情岛论坛网亚洲品质自拍| 香蕉成人免费看片视频app下载| 亚洲国产成人在线视频| 亚洲AV日韩精品一区二区三区 | 精品97国产免费人成视频| 久久香蕉国产线看观看亚洲片| 无人在线直播免费观看| 免费无毒a网站在线观看| 亚洲欧洲国产日韩精品| 免费人成年轻人电影| 国产精品视频白浆免费视频| 亚洲中文字幕久久无码| 亚洲人精品午夜射精日韩 |