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

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

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

    jialisoftw

    overload與override的區別

    overload與override的區別:
     
    java多態之Override :
    Override(重寫)是子類與父類的一種多態性體現。 
    Override允許子類改變父類的一些行為。 
    為什么需要Override:當父類不滿足子類的一些要求時我們就需要子類對父類的一些行為進行重寫。 
    例如:某公司里的員工的電話號碼不允許對外公開,而銷售人員(員工)的電話號碼則需要對外公開。 
    這時我們就可以這樣做: 
    Java代碼  
    public class Employee {        
       private String mobile;        
       public Employee(String mobile) {   
            this.mobile = mobile;   
        }        
       protected String showMess(){   
           return "電話號碼:"+mobile;   
       }   
    }  
    public class Employee {  
            private String mobile; 
            public Employee(String mobile) {
                    this.mobile = mobile;
            }
            protected String showMess(){
                    return "電話號碼:"+mobile;
            }
    }
    員工類的showMess方法是protected的,所以位于其他包的對象是訪問不到的。
    然后定義一個銷售人員的類(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;
            }
    }
    注意這時被覆蓋的showMess方法的訪問級別是public,可以被任何其他對象訪問到。
    關于Override有幾點要注意的地方: 
    1.被覆蓋方法的訪問控制級別可以不一樣。 
    例如上例父類的showMess方法的訪問級別為protected的,而子類覆蓋的showMess方法訪問級別則為public的。
    但子類的訪問級別必須要高于父類被覆蓋方法的訪問級別,如果父類是public的而子類是protected的則是錯誤的。
    2.方法被定義為private或static或final的則不能被覆蓋。
    3.方法的返回類型:子類的返回類型可以是更具體的對象,例如可以將Employee類的返回類型改為Object也正確。而倒過來則錯誤。
    4.在方法調用時先會在子類中找覆蓋的方法,如果子類中沒有則會在父類中去找。
     
    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;
            }
    }
    這段代碼的執行結果為什么呢?如果你回答-1則錯了,正確答案是3。 
    為什么呢?因為父類的num方法是private的,所以不能被覆蓋,所以子類的num方法不是一種Override,因此在子類找不到被覆蓋的num方法就會執行父類的num方法。所以結果輸出為3.
     
    Java代碼  
    public class Parent {          
        public int test(){   
                    //執行子類的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(){
                    //執行子類的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;
            }
    }
    那么這段代碼的執行結果是-1,因為父類test方法調用的是子類的num方法。
     java overload的原則 :
    在java中overload要遵循兩個原則:準確性和唯一性
     
    例一:
    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"); 
    }
    }
    在這個程序中,   test.print(null)中的null即是String又是Object,那么要執行那個函數呢?結果是它執行了 public void print(String some),原因就是準確性原則,String繼承自Object.在java看來,在這個例子中說null是String類型的比說null是Object類型的更為準確.
     
    例二:
    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類多了一個函數,然而在編譯時出現了錯誤.原因是該例違反了overload的唯一性原則
     
    .String和StringBuffer之間不存在繼承關系,因此不能說null屬于它們兩個中的那個類更準確,于是程序在執行時就會不知道該調用public void print(String some),還是該調用 public void print(StringBuffer some).
    原文地址:http://www.software8.co/wzjs/java/1261.html

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


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


    網站導航:
     

    導航

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

    統計

    常用鏈接

    留言簿

    隨筆檔案

    友情鏈接

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲一级黄色视频| 免费人成在线观看视频播放| 亚洲国产精品无码久久久秋霞2| 美女尿口扒开图片免费| 国产精品免费看香蕉| 亚洲乱码无人区卡1卡2卡3| 免费无码黄网站在线观看| 亚洲AV色欲色欲WWW| 免费一看一级毛片| h片在线播放免费高清| 国产性爱在线观看亚洲黄色一级片| 又大又硬又粗又黄的视频免费看| 亚洲综合区小说区激情区| 男女拍拍拍免费视频网站| 亚洲成色www久久网站夜月| 最近2019中文字幕免费大全5| 亚洲国产成人久久99精品| 久久久久久国产精品免费免费| 亚洲国产精品无码久久| 亚洲国产成人精品久久久国产成人一区二区三区综 | 国产精品亚洲午夜一区二区三区| 免费看韩国黄a片在线观看| 国产精品国产亚洲区艳妇糸列短篇| 亚洲精品线路一在线观看| 久久久久久成人毛片免费看| 亚洲制服丝袜一区二区三区| 国产又大又黑又粗免费视频| 一级视频在线免费观看| 亚洲美女视频网址| 免费乱码中文字幕网站| 久久精品国产影库免费看| 亚洲不卡影院午夜在线观看| 亚洲福利视频一区二区| 67194国产精品免费观看| 日本亚洲欧美色视频在线播放| 精品久久久久久亚洲| a毛片基地免费全部视频| 久久精品免费网站网| 色噜噜亚洲男人的天堂| 中文字幕精品亚洲无线码二区| 91免费国产自产地址入|