qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          Java多態性Overload和Override的區別

           最近看了一下關于java的基礎知識,對此作了一下搜集整理:
            java中的繼承,方法覆蓋(重寫)override與方法的重載overload的區別
            方法的重寫(Overriding)和重載(Overloading)是Java多態性的不同表現。
            重寫(Overriding)是父類與子類之間多態性的一種表現,而重載(Overloading)是一個類中多態性的一種表現。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫 (Overriding) 。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被"屏蔽"了。如果在一個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型或有不同的參數次序,則稱為方法的重載(Overloading)。不能通過訪問權限、返回類型、拋出的異常進行重載。
            1. Override 特點
            1、覆蓋的方法的標志必須要和被覆蓋的方法的標志完全匹配,才能達到覆蓋的效果;
            2、覆蓋的方法的返回值必須和被覆蓋的方法的返回一致;
            3、覆蓋的方法所拋出的異常必須和被覆蓋方法的所拋出的異常一致,或者是其子類;
            4、方法被定義為final不能被重寫。
            5、對于繼承來說,如果某一方法在父類中是訪問權限是private,那么就不能在子類對其進行重寫覆蓋,如果定義的話,也只是定義了一個新方法,而不會達到重寫覆蓋的效果。(通常存在于父類和子類之間。)
            2.Overload 特點
            1、在使用重載時只能通過不同的參數樣式。例如,不同的參數類型,不同的參數個數,不同的參數順序(當然,同一方法內的幾個參數類型必須不一樣,例如可以是fun(int, float), 但是不能為fun(int, int));
            2、不能通過訪問權限、返回類型、拋出的異常進行重載;
            3、方法的異常類型和數目不會對重載造成影響;
            4、重載事件通常發生在同一個類中,不同方法之間的現象。
            5、存在于同一類中,但是只有虛方法和抽象方法才能被覆寫。
            其具體實現機制:
            overload是重載,重載是一種參數多態機制,即代碼通過參數的類型或個數不同而實現的多態機制。 是一種靜態的綁定機制(在編譯時已經知道具體執行的是哪個代碼段)。
            override是覆蓋。覆蓋是一種動態綁定的多態機制。即在父類和子類中同名元素(如成員函數)有不同 的實現代碼。執行的是哪個代碼是根據運行時實際情況而定的。
            Overrride實例 :
          class A{
          public int getVal(){
          return(5);
          }
          }
          class B extends A{
          public int getVal(){
          return(10);
          }
          }
          public class override {
          public static void main(String[] args) {
          B b = new B();
          A a= (A)b;//把 b 強 制轉換成A的類型
          int x=a.getVal();
          System.out.println(x);
          }
          }
            結果:10
          Overload實例:
          //Demostrate method voerloading.
          class OverloadDemo {
          void test(){
          System.out.println("NO parameters");
          }
          void test(int a){
          System.out.println("a:"+a);
          }//end of Overload test for one integer parameter.
          void test(int a, int b){
          System.out.println("a and b:"+a+" "+b);
          }
          double test(double a){
          System.out.println("double a:"+a);
          return a*a;
          }
          }
          public class Overload{
          public static void main(String[] args) {
          OverloadDemo ob = new OverloadDemo();
          double result;
          ob.test();
          ob.test(10);
          ob.test(10, 20);
          result = ob.test(123.25);
          System.out.println("Result of ob.test(123.25):"+result);
          }
          }
            結果:
            NO parameters
            a:10
            a and b:10 20
            double a:123.25
            Result of ob.test(123.25):15190.5625

          posted on 2013-10-17 11:18 順其自然EVO 閱讀(194) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2013年10月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 陈巴尔虎旗| 泰兴市| 玉树县| 拜城县| 九龙城区| 荃湾区| 昆明市| 景宁| 博爱县| 勐海县| 木里| 西乡县| 文山县| 馆陶县| 四平市| 白朗县| 长武县| 仁寿县| 绿春县| 柘城县| 平度市| 东台市| 五大连池市| 金昌市| 宁德市| 宝清县| 金乡县| 磴口县| 达日县| 和龙市| 剑河县| 马鞍山市| 澳门| 吉隆县| 烟台市| 波密县| 沙雅县| 和龙市| 台安县| 习水县| 泾源县|