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

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

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

    隨筆 - 4  文章 - 10  trackbacks - 0
    <2025年7月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    常用鏈接

    留言簿(1)

    隨筆檔案

    文章分類

    文章檔案

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    出處:http://m.tkk7.com/crazycy/archive/2006/10/11/74622.html

    < 示例1>

     


     1 class  Base {
     2      int  x  =   2 ;
     3      int  method() {
     4          return  x;
     5     }

     6 }

     7
     8 class  SubClass  extends  Base {
     9      int  x  =   3 ;
    10      int  method() {
    11          return  x;
    12     }

    13 }

    14
    15 public   class  Main 
    16          public   static   void  main(String[] args)  {
    17         Base b  =   new  SubClass ();
    18         System.out.println(b.x);
    19         System.out.println(b.method());
    20     }

    21 }

     


    2 , 3

     

     

    <練習(xí)>

     


     1 class   s1    {   
     2        public   String  s = " s1 " ;   
     3        public   String  get()   {   
     4            return   s;   
     5       }
       
     6 }
       
     7 class   s2   extends   s1    {   
     8       public    String   s = " s2 " ;   
     9        public    String   get()    {   
    10            return    s;   
    11       }
       
    12  }
       
    13 public     class    s   {   
    14        public     static     void    main(String[]   args)   {   
    15           s1  a    =     new   s2();   
    16           System.out.println(a.s);   
    17           System.out.println(a.get());     
    18       }
       
    19  }
      

     


     1 這個(gè)地方就是多態(tài)的一個(gè)陷阱;   
     2 多態(tài)是對(duì)方法而言的,不是對(duì)變量;   
     3 s1 a  =   new  s2();這里生成的對(duì)象是s1類的實(shí)例,但是是由s2類構(gòu)造的;   
     4     
     5   java中對(duì)變量的選擇是靜態(tài)的,對(duì)方法的選擇是動(dòng)態(tài)的,是在運(yùn)行時(shí)決定的。(static除外)   
     6   運(yùn)行時(shí)實(shí)際上調(diào)用的是實(shí)例的方法,即s1的方法;但對(duì)于繼承(多態(tài)的一種方式),方法的定位是在動(dòng)態(tài)執(zhí)行時(shí)選擇的,選擇實(shí)際構(gòu)造者,因此就出現(xiàn)了本題的現(xiàn)象了。   
     7
     8 另外:多態(tài)是對(duì)方法而言的,不是對(duì)變量;這樣說有些不嚴(yán)密,方法應(yīng)該有個(gè)修飾,就是除了final修飾的方法外,java中對(duì)函數(shù)的調(diào)用都是后期綁定,所謂的后期綁定就是動(dòng)態(tài)選擇
     9
    10 摘自 崔毅解答csdn疑問時(shí)給出的分析
    11
    12

     


    示例2>

     


     1 class  Base {
     2      private   final   void  f() {
     3         System.out.println( " Base.f() " );
     4     }

     5 }

     6
     7 class  Derived  extends  Base {
     8      public   final   void  f() {
     9         System.out.println( " Derived.f() " );
    10     }

    11 }

    12
    13 public   class  Main 
    14          public   static   void  main(String[] args)  {
    15         Derived op1  =   new  Derived();
    16         Base op2 = op1;
    17         op1.f();
    18         op2.f();
    19     }

    20 }

    21

     


    op2.f();

     


    <示例3>

     


     1 class    Parent {   
     2        private     void    method1() {   
     3           System.out.println( " Parent's   method1() " );   
     4       }
       
     5        public     void    method2() {   
     6           System.out.println( " Parent's   method2() " );   
     7           method1();   
     8       }
       
     9   }
       
    10    class    Child    extends    Parent {   
    11        public     void    method1() {   
    12          System.out.println( " Child's   method1() " );   
    13       }
       
    14        public     static     void    main(String   args[]) {   
    15           Parent   p    =     new    Child();   
    16           p.method2();   
    17       }
       
    18   }
       

     


    1 答案是:prints:   parent’s   method2()     parent’s   method1()   
    2 如果把父類中method1改成public,那么答案是
    3 prints:   parent’s   method2()     child’s   method1()

     


    分析

    多態(tài):

    Java 中的函數(shù),除了聲明外 final 的外,都是后期綁定。

    所謂綁定是建立“函數(shù)調(diào)用”和“函數(shù)本體”的關(guān)聯(lián)。、

    所謂的后期綁定是指執(zhí)行時(shí)根據(jù)對(duì)象類別而進(jìn)行

    多態(tài)僅僅對(duì)函數(shù)而言,不對(duì)變量而言

    變量的訪問依賴于編譯期引用指向的類型

    方法的訪問依賴于執(zhí)行期對(duì)象的類型

    向上轉(zhuǎn)型后,調(diào)用某個(gè)函數(shù),若 derived class overriding 了該函數(shù),則會(huì)調(diào)用該 derived class 中的函數(shù),否則會(huì)調(diào)用 base class 中的函數(shù)

    向上轉(zhuǎn)型后,只能調(diào)用 base class 中被 derived class overriding 的函數(shù),不能調(diào)用 derived class extend 函數(shù)。

    向上轉(zhuǎn)型后,只能調(diào)用 base class 中的方法,不能調(diào)用 derived class 中的擴(kuò)展方法 
     

     


     1 public   class  CalC  {
     2      void  amethod() {
     3         System.out.println( " CalC.amethod " );
     4     }

     5     CalC() {
     6         amethod();
     7         System.out.println( " Hu? " );
     8     }

     9      public   static   void  main(String[] args)  {
    10         CalC cc  =   new  CalChild();
    11         cc.amethod();
    12     }

    13 }

    14 class  CalChild  extends  CalC {
    15      void  amethod() {
    16         System.out.println( " CalChild.amethod " );
    17     }

    18 }

     


    1 output:
    2 CalChild.amethod
    3 Hu ?
    4 CalChild.amethod
    5 為什么CalC Constructor調(diào)用的不是自己的amethod()呢

     


    1 方法在內(nèi)存中只有一個(gè)備份,所以的對(duì)象都共享這個(gè)備份,為了區(qū)分開到底是哪個(gè)對(duì)象在調(diào)用這個(gè)方法,關(guān)鍵的地方就是this的使用。this把調(diào)用方法的上下文對(duì)應(yīng)到當(dāng)前對(duì)象上。
    2
    3 第二,調(diào)用java中的所有成員變量或者成員函數(shù)都隱含了this。
    4
    5 所以這個(gè)地方就很明了了:構(gòu)造子類,this指針代表的當(dāng)前對(duì)象是子類實(shí)例,子類實(shí)例為啥不調(diào)用自己overriding的方法呢?!
    6
    posted on 2007-09-04 17:09 冬天出走的豬 閱讀(244) 評(píng)論(0)  編輯  收藏 所屬分類: j2se
    主站蜘蛛池模板: 亚洲av日韩av欧v在线天堂| 一级毛片**不卡免费播| 国产精品视_精品国产免费| 亚洲天堂一区二区三区| 日本片免费观看一区二区| 亚洲免费在线视频观看| 丁香花免费完整高清观看| 亚洲国产91在线| 成人在线免费观看| 国产亚洲精品免费| 久久久久亚洲AV成人网| 女同免费毛片在线播放| 亚洲欧洲一区二区| 99久久综合国产精品免费| 亚洲一区二区三区写真| 免费亚洲视频在线观看| 两性色午夜视频免费播放| 久久99国产亚洲精品观看| 日韩免费一区二区三区在线| 国产亚洲综合网曝门系列| 久久免费香蕉视频| 亚洲福利视频一区| 成年人性生活免费视频| 视频免费1区二区三区| 亚洲成A人片在线观看无码不卡 | 四虎影视永久在线精品免费| 亚洲一区二区三区影院| 18级成人毛片免费观看| 国产精品jizz在线观看免费| 日韩a毛片免费观看| 亚洲一区免费观看| 国产精品久久免费视频| 毛片免费在线观看| 亚洲人成无码网站在线观看| 亚洲欧洲自拍拍偷精品 美利坚| 免费看少妇高潮成人片| 中文字幕亚洲情99在线| 亚洲色精品aⅴ一区区三区| av无码久久久久不卡免费网站| 免费很黄无遮挡的视频毛片| 亚洲精品在线播放|