<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
    主站蜘蛛池模板: 久久99国产亚洲精品观看| 国产精品永久免费视频| 91国内免费在线视频| 亚洲va在线va天堂va不卡下载 | 久久精品国产亚洲AV蜜臀色欲 | yellow视频免费在线观看| 妞干网免费观看视频| 国产A∨免费精品视频| 亚洲码一区二区三区| 亚洲国产一区明星换脸| 国产精品免费观看| 国产黄在线播放免费观看| 亚洲一区二区三区免费观看| 2019中文字幕在线电影免费| 亚洲男人天堂av| 日产国产精品亚洲系列| 精品一区二区三区免费毛片| 亚洲国产精品国自产拍电影 | 亚洲1234区乱码| 亚洲精品中文字幕无码蜜桃| 免费在线中文日本| 无码天堂va亚洲va在线va| 亚洲一级毛片免费在线观看| 在人线av无码免费高潮喷水| 精品熟女少妇aⅴ免费久久| 亚洲综合色视频在线观看| 久久国产精品免费一区| 亚洲高清一区二区三区电影 | 真正全免费视频a毛片| 亚洲国产精品成人精品软件| 免费人成网站在线观看10分钟| 亚洲剧情在线观看| 成人免费无遮挡无码黄漫视频| 亚洲丁香婷婷综合久久| 青青青国产色视频在线观看国产亚洲欧洲国产综合 | 亚洲成AV人片在线观看无码| 国产又粗又猛又爽又黄的免费视频| 99re免费在线视频| 97无码人妻福利免费公开在线视频 | 爱情岛论坛网亚洲品质自拍| 国产免费av一区二区三区|