乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      方法的多態(tài)static理解 與 static方法(與隱式static方法)

       鳳舞天煌 2007-11-12
      方法的多態(tài)static理解
      要強調(diào)的是,,多態(tài)性只發(fā)生于方法,而不發(fā)生于域.并且,對于方法,只有那些非static與非final方法才具有多態(tài)性.

      這里討論的是static方法不能發(fā)生多態(tài).值得注意的是,所謂的static方法不能多態(tài)指的是:override的方法本身是不是static的,而不是指調(diào)用override方法的方法是不是static的!比如以下程序:
      class Father {
      public void act() {
      System.out.println("Father.act()");
      }
      }

      class Son extends Father {
      public void act() {
      System.out.println("Son.act()");
      }
      }
      public    class    Test {
      public static    void test(Father i) {    //static方法
      i.act();
      }
      public static void main(String[] a)    {
      Son son = new Son();
      test(son);

      }
      }    //輸出結果為:Son.act(),如果static不能多態(tài),那結果不就應該是Father.act()嗎?

      其實,就象上面說的.我們要考慮的是 的act()方法是不是static,有沒有多態(tài),而不是調(diào)用的方法(test())是不是static的
      這跟test方法是否static無關,若把兩個act方法都修改成static,則輸出結果就是Father.act(),因為static 方法不能多態(tài)
       
       
      static方法(與隱式static方法)

              static方法就是沒有this的方法.在static方法的內(nèi)部不能調(diào)用非靜態(tài)方法,反過來,非靜態(tài)方法倒是可以調(diào)用static方法.
            !!! 值得注意的是:這里說的是在static方法內(nèi)部,不能直接調(diào)用非static方法,但可以通過生成對象來調(diào)用非靜態(tài)方法.
              在static方法內(nèi)部,也不可以調(diào)用非static變量,其實道理很簡單,因為static是面向全局的,相當于全局方法,不可能只針對某個類中的一般變量而使用.

              在static與非static方法內(nèi)部都不能聲明static變量.(全局變量),因為,在方法內(nèi)聲明的變量都是局部變量,不可能在里面定義一個全局變量.

      =====了解上面的知識后,你可能會發(fā)現(xiàn)有一個特例:在編程思想第四版P157上,(還有很多地方都曾經(jīng)說過)構造器隱式的就是static的!然而在構造器內(nèi)部為什么可以直接調(diào)用非靜態(tài)方法??
                  static方法就是沒有this的方法.在static方法的內(nèi)部不能調(diào)用非靜態(tài)方法,反過來,非靜態(tài)方法倒是可以調(diào)用static方法.
           !!! 值得注意的是:這里說的是在static方法內(nèi)部,不能直接調(diào)用非static方法,但可以通過生成對象來調(diào)用非靜態(tài)方法.
             在static方法內(nèi)部,也不可以調(diào)用非static變量,其實道理很簡單,因為static是面向全局的,相當于全局方法,不可能只針對某個類中的一般變量而使用.

             在static與非static方法內(nèi)部都不能聲明static變量.(全局變量),因為,在方法內(nèi)聲明的變量都是局部變量,不可能在里面定義一個全局變量.

      =====了解上面的知識后,你可能會發(fā)現(xiàn)有一個特例:在編程思想第四版P157上,(還有很多地方都曾經(jīng)說過)構造器隱式的就是static的!然而在構造器內(nèi)部為什么可以直接調(diào)用非靜態(tài)方法??
            所謂顯式隱式static,是指類在實例化時,系統(tǒng)會執(zhí)行的代碼
      比如
      public class StaticTest {
           
            { //這樣沒有static關鍵字的,叫隱式static,系統(tǒng)執(zhí)行完顯式static后會接著執(zhí)行隱式static的代碼
                System.out.println("hide static");
                show(); // 這個方法不是static的,但是在這里不會出錯
            }
           
            static { //這樣有static關鍵字的叫顯式static,系統(tǒng)會先執(zhí)行顯式static的代碼
                System.out.println("static");
                //show(); //這個方法不是static的,所以會出錯
                }
           
            public StaticTest() { //執(zhí)行完顯式和隱式static后,系統(tǒng)會執(zhí)行構造器的代碼,因為構造器沒有static,但也會被執(zhí)行,跟隱式static一樣,所以書上就把它說成隱式static了
                System.out.println("constuctor");
            }
           
            public void show() {
                System.out.println("show");
            }
           
            public static void main(String[] args) {
                new StaticTest();
            }
           
      }

      所以所謂顯式隱式static,只是對于類實例化執(zhí)行代碼的先后順序而言的,從某種意義上說,不帶static的都可以叫隱式static,隱式static可以調(diào)用隱式static

        本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多