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

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

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

    jialisoftw

    overload與override的區(qū)別

    overload與override的區(qū)別:
     
    java多態(tài)之Override :
    Override(重寫)是子類與父類的一種多態(tài)性體現(xiàn)。 
    Override允許子類改變父類的一些行為。 
    為什么需要Override:當(dāng)父類不滿足子類的一些要求時(shí)我們就需要子類對(duì)父類的一些行為進(jìn)行重寫。 
    例如:某公司里的員工的電話號(hào)碼不允許對(duì)外公開,而銷售人員(員工)的電話號(hào)碼則需要對(duì)外公開。 
    這時(shí)我們就可以這樣做: 
    Java代碼  
    public class Employee {        
       private String mobile;        
       public Employee(String mobile) {   
            this.mobile = mobile;   
        }        
       protected String showMess(){   
           return "電話號(hào)碼:"+mobile;   
       }   
    }  
    public class Employee {  
            private String mobile; 
            public Employee(String mobile) {
                    this.mobile = mobile;
            }
            protected String showMess(){
                    return "電話號(hào)碼:"+mobile;
            }
    }
    員工類的showMess方法是protected的,所以位于其他包的對(duì)象是訪問不到的。
    然后定義一個(gè)銷售人員的類(Sales),并繼承Employee類
     
    Java代碼  
    public class Sales extends Employee{   
           //子類除了具有父類的一些屬性,也可以有自己的一些屬性   
      private String msn;   
       public Sales(String mobile,String msn) {   
           super(mobile);   
           this.msn = msn;   
       }     
        @Override  
       public String showMess() {   
          return super.showMess()+"==msn:"+this.msn;   
       }   
    }  
    public class Sales extends Employee{   
            //子類除了具有父類的一些屬性,也可以有自己的一些屬性
            private String msn;
     
            public Sales(String mobile,String msn) {
                    super(mobile);
                    this.msn = msn;
            }
            @Override
            public String showMess() {
                    return super.showMess()+"==msn:"+this.msn;
            }
    }
    注意這時(shí)被覆蓋的showMess方法的訪問級(jí)別是public,可以被任何其他對(duì)象訪問到。
    關(guān)于Override有幾點(diǎn)要注意的地方: 
    1.被覆蓋方法的訪問控制級(jí)別可以不一樣。 
    例如上例父類的showMess方法的訪問級(jí)別為protected的,而子類覆蓋的showMess方法訪問級(jí)別則為public的。
    但子類的訪問級(jí)別必須要高于父類被覆蓋方法的訪問級(jí)別,如果父類是public的而子類是protected的則是錯(cuò)誤的。
    2.方法被定義為private或static或final的則不能被覆蓋。
    3.方法的返回類型:子類的返回類型可以是更具體的對(duì)象,例如可以將Employee類的返回類型改為Object也正確。而倒過來則錯(cuò)誤。
    4.在方法調(diào)用時(shí)先會(huì)在子類中找覆蓋的方法,如果子類中沒有則會(huì)在父類中去找。
     
    Java代碼  
    public class Parent {          
        private int num(int i,int j){   
           return i+j;   
        }         
      public static void main(String[] args) {   
          Parent p = new Child();   
           System.out.println(p.num(1, 2));   
       }   
    }   
    class Child extends Parent{        
       public int num(int x,int y){   
            return x-y;   
       }   
    }  
    public class Parent {
            private int num(int i,int j){
                    return i+j;
            } 
            public static void main(String[] args) {
                    Parent p = new Child();
                    System.out.println(p.num(1, 2));
            }
    }
    class Child extends Parent{    
            public int num(int x,int y){
                    return x-y;
            }
    }
    這段代碼的執(zhí)行結(jié)果為什么呢?如果你回答-1則錯(cuò)了,正確答案是3。 
    為什么呢?因?yàn)楦割惖膎um方法是private的,所以不能被覆蓋,所以子類的num方法不是一種Override,因此在子類找不到被覆蓋的num方法就會(huì)執(zhí)行父類的num方法。所以結(jié)果輸出為3.
     
    Java代碼  
    public class Parent {          
        public int test(){   
                    //執(zhí)行子類的num方法   
            return num(1,2);   
    }          
        protected int num(int i,int j){   
            return i+j;   
       }          
        public static void main(String[] args) {   
            Parent p = new Child();   
            System.out.println(p.test());   
    }     
    }   
    class Child extends Parent{          
        public int num(int x,int y){   
            return x-y;   
        }   
    }  
    public class Parent {
            
            public int test(){
                    //執(zhí)行子類的num方法
                    return num(1,2);
            } 
            protected int num(int i,int j){
                    return i+j;
            } 
            public static void main(String[] args) {
                    Parent p = new Child();
                    System.out.println(p.test());
            }
    }
    class Child extends Parent{
            
            public int num(int x,int y){
                    return x-y;
            }
    }
    那么這段代碼的執(zhí)行結(jié)果是-1,因?yàn)楦割恡est方法調(diào)用的是子類的num方法。
     java overload的原則 :
    在java中overload要遵循兩個(gè)原則:準(zhǔn)確性和唯一性
     
    例一:
    public class TestOverLoad
    {
    public static void main(String[] args)
    {
       Test test = new Test();
       test.print(null);  
    }
    class Test
    {
    public void print(String some)
    {
       System.out.println("String version print");
    }
    public void print(Object some)
    {
       System.out.println("Object version print"); 
    }
    }
    在這個(gè)程序中,   test.print(null)中的null即是String又是Object,那么要執(zhí)行那個(gè)函數(shù)呢?結(jié)果是它執(zhí)行了 public void print(String some),原因就是準(zhǔn)確性原則,String繼承自O(shè)bject.在java看來,在這個(gè)例子中說null是String類型的比說null是Object類型的更為準(zhǔn)確.
     
    例二:
    public class TestOverLoad
    {
    public static void main(String[] args)
    {
       Test test = new Test();
       test.print(null);  
    }
    class Test
    {
    public void print(String some)
    {
       System.out.println("String version print");
    }
    public void print(Object some)
    {
       System.out.println("Object version print"); 
    }
     
    public void print(StringBuffer some)
    {
       System.out.println("StringBuffer version print"); 
    }
    }
    在該例中,Test類多了一個(gè)函數(shù),然而在編譯時(shí)出現(xiàn)了錯(cuò)誤.原因是該例違反了overload的唯一性原則
     
    .String和StringBuffer之間不存在繼承關(guān)系,因此不能說null屬于它們兩個(gè)中的那個(gè)類更準(zhǔn)確,于是程序在執(zhí)行時(shí)就會(huì)不知道該調(diào)用public void print(String some),還是該調(diào)用 public void print(StringBuffer some).
    原文地址:http://www.software8.co/wzjs/java/1261.html

    posted on 2012-11-14 10:23 飛豬一號(hào) 閱讀(1227) 評(píng)論(0)  編輯  收藏


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     

    導(dǎo)航

    <2012年11月>
    28293031123
    45678910
    11121314151617
    18192021222324
    2526272829301
    2345678

    統(tǒng)計(jì)

    常用鏈接

    留言簿

    隨筆檔案

    友情鏈接

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 在线a人片天堂免费观看高清| 免费国产污网站在线观看不要卡| 亚洲精品无码久久久久久久 | 动漫黄网站免费永久在线观看| 小草在线看片免费人成视久网| 无人在线观看免费高清| 久久国产精品免费视频| 久久久久高潮毛片免费全部播放| 91短视频在线免费观看| 久久久久久曰本AV免费免费| av大片在线无码免费| 69成人免费视频无码专区| 国内一级一级毛片a免费| 四虎免费久久影院| 亚洲午夜激情视频| 亚洲精品卡2卡3卡4卡5卡区| 久久香蕉国产线看观看亚洲片| 亚洲五月六月丁香激情| 激情内射亚洲一区二区三区| 亚洲成AV人片久久| 亚洲中文字幕无码av| 午夜亚洲乱码伦小说区69堂| 精品熟女少妇aⅴ免费久久| 免费观看91视频| 91免费在线播放| 精品国产麻豆免费网站| 亚洲福利精品电影在线观看| 国产亚洲精久久久久久无码| 久久精品亚洲一区二区三区浴池| 色偷偷女男人的天堂亚洲网| 日韩欧美亚洲国产精品字幕久久久| 无码免费又爽又高潮喷水的视频| 亚洲免费观看视频| 国产一卡2卡3卡4卡无卡免费视频| 色播在线永久免费视频| 久久亚洲AV无码西西人体| 久久亚洲AV成人出白浆无码国产| 亚洲砖码砖专无区2023| 一级毛片免费不卡直观看| 午夜精品一区二区三区免费视频| 成人性生交视频免费观看|