<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)論排行榜

    主站蜘蛛池模板: 全部免费国产潢色一级| 色九月亚洲综合网| 亚洲午夜无码AV毛片久久| 久久经典免费视频| 七色永久性tv网站免费看| 国产一区二区三区亚洲综合| 亚洲最大的视频网站| 中文字幕在线亚洲精品| 又粗又硬免费毛片| 成人免费在线视频| 亚洲国产精品免费在线观看| a毛片视频免费观看影院| 四虎影视在线看免费观看| 自拍偷自拍亚洲精品播放| 亚洲熟妇无码AV不卡在线播放| 亚洲色av性色在线观无码| 亚洲av日韩av无码黑人| 亚洲一区二区三区影院| 亚洲伊人久久综合影院| 免费一级毛片在级播放| 国产日产成人免费视频在线观看| 大地资源在线观看免费高清| 91精品免费在线观看| 五月亭亭免费高清在线| 亚洲人成在线免费观看| 99精品视频在线视频免费观看| 精品一卡2卡三卡4卡免费视频| 在线播放免费人成毛片乱码| 在线观看黄片免费入口不卡| a级毛片在线免费| 三根一起会坏掉的好痛免费三级全黄的视频在线观看 | 亚洲精品黄色视频在线观看免费资源 | 亚洲AV无码不卡在线观看下载| 国内大片在线免费看| 女性无套免费网站在线看| 成人au免费视频影院| 成人无遮挡毛片免费看| 国产美女精品久久久久久久免费 | 亚洲人成网站18禁止| 亚洲国产成人手机在线观看| 亚洲日本成本人观看|