国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

方法重寫與方法重載

2019-11-15 00:14:11
字體:
來源:轉載
供稿:網友
方法重寫與方法重載

繼承和多態都是面向對象程序設計的特點。使用繼承可以在一個父類的基礎上再創建一個子類,這個子類不但擁有父類已有的屬性和方法,還可以創建屬于自己的屬性和方法。由于子類和父類之間的關系,從而引出了方法重寫和方法重載的問題。方法重寫及方法重載在繼承和多態性方面的應用中會存在很多問題,這些概念很容易混淆,掌握重寫和重載的區別對學會使用多態的方式編寫程序、提高程序的可維護性奠定了基礎。一、方法重寫(0veriding)如何定義重寫:在java程序中,類的繼承關系可以產生一個子類,子類繼承父類,它具備了父類所有的特征,繼承了父類所有的方法和變量。子類可以定義新的特征,當子類需要修改父類的一些方法進行擴展,增大功能,程序設計者常常把這樣的一種操作方法稱為重寫,也叫稱為覆寫或覆蓋。重寫體現了Java優越性,重寫是建立在繼承關系上,它使語言結構更加豐富。在Java中的繼承中,子類既可以隱藏和訪問父類的方法,也可以覆蓋繼承父類的方法。在Java中覆蓋繼承父類的方法就是通過方法的重寫來實現的。所謂方法的重寫是指子類中的方法與父類中繼承的方法有完全相同的返回值類型、方法名、參數個數以及參數類型。這樣,就可以實現對父類方法的覆蓋。例如:下面的代碼實現了方法的重寫。

class Person//定義父類fpublic void PRint(){//父類中的方法System.out.println( 父類Person的print方法! );}}class Student extends Person//定義子類繼承Person類{public void print(){//方法的重寫System.out.println( 子類Student的print方法! );}}public class 0verrideExampleO1{public static void main(String args[]){Student s=new Student();S.print();}}運行結果:子類Student的print方法!可以看出,當子類重寫了父類中的print()方法后,使用S調用的是子類的print()方法,父類中的print()方法被覆蓋了。也就是說,如果現在子類將父類中的方法重寫了,調用的時候肯定是調用被重寫過的方法,那么如果現在一定要調用父類中的方法該怎么辦呢?此時,通過使用.. super關鍵就可以實現這個功能,super關鍵字可以從子類訪問父類中的內容,如果要訪問被重寫過的方法,使用“super.方法名(參數列表)”的形式調用。例如:Class Person{public void print () {System.out.println( 父類Person的print方法! );}}class Student extends Person{public void print () {super.print(://訪問父類中被子類覆寫過的方法System.out.println(" 子類Student的print方法!" );}}public class OverrideExample02{public static void main(String args[]){Student s=new Student();S.print();}}運行結果:父類Person的print方法!子類Student的print方法 !如果要使用super關鍵字不一定非要在方法重寫之后使用,也可以明確地表示某個方法是從父類中繼承而來的。使用super

只是更加明確的說,要從父類中查找,就不在子類查找了。

二、重寫規則在重寫方法時,需要遵循以下的規則:(一) 父類方法的參數列表必須完全與被子類重寫的方法的參數列表相同,否則不能稱其為重寫而是重載。..(二) 父類的返回類型必須與被子類重寫的方法返回類型相同,否則不能稱其為重寫而是重載。..(三) Java中規定,被子類重寫的方法不能擁有比父類方法更加嚴格的訪問權限。訪問權限大小關系為:編寫過Java程序的人就知道,父類中的方法并不是在任何情況下都可以重寫的,當父類中方法的訪問權限修飾符為private時,該方法只能被自己的類訪問,不能被外部的類訪問,在子類是不能被重寫的。如果定義父類的方法為public,在子類定義為private,程序運行時就會報錯。例如:class Person{public void print()(//public訪問權限System.out.println( "父類Person的print方法! ");}}Class Stedent extends Person{private void print()(//重寫方法降低了訪問權限,錯誤System.out.println( "子類Student的print方法!" );}}(四) 由于父類的訪問權限修飾符的限制一定要大于被子類重寫方法的訪問權限修飾符,而private權限最小。所以如果某一個方法在父類中的訪問權限是private,那么就不能在子類中對其進行重寫。如果重新定義,也只是定義了一個新的方法,不會達到重寫的效果。(五) 在繼承過程中如果父類當中的方法拋出異常,那么在子類中重寫父類的該方法時,也要拋出異常,而且拋出的異常不能多于父類中拋出的異常(可以等于父類中拋出的異常)。換句話說,重寫方法一定不能拋出新的檢查異常,或者比被重寫方法聲明更加寬泛的檢查型異常。例如,父類的一個方法申明了一個檢查異常IOException,在重寫這個方法時就不能拋出Exception,只能拋出IOException的子類異常,可以拋出非檢查異常。

同樣的道理,如果子類中創建了一個成員變量,而該變量和父類中的一個變量名稱相同,稱作變量重寫或屬性覆蓋。但是此概念一般很少有人去研究它,因為意義不大。三、方法重載(Overloading)(一) 如何定義重載。方法的重寫和重載只有一個字不同,很多初學者認為這兩者十分相似,其實不然。方法重載是讓類以統一的方式處理不同類型數據的一種手段。調用方法時通過傳遞給它們的不同個數和類型的參數來決定具體使用哪個方法,這就是多態性。所謂方法重載是指在一個類中,多個方法的方法名相同,但是參數列表不同。參數列表不同指的是參數個數、參數類型或者參數的順序不同。方法的重載在實際應用中也會經常用到。不僅是一般的方法,構造方法也可以重載。下面通過一個實例來分析。重載的定義和使用方法。Class Person {{String name;int age;void print(){System.out.println("姓名:" +name+"年齡:" +age);}void print(String a,int b){System.out.println("姓名:" +a+"年齡:"+b);void print(String a,int b,intC){System.out.println("姓名:"+a+"年齡:" +b+"ID號:" +c);}void print(String a,int b,doubleC){System.out.println("姓名:"+a+"年齡:" +b+"ID號:"+c);}}public class OverLoadExampleOL{publicstaticvoidmain(String args[]){Personpl=newPerson();p1.nanle="李明";p1.age=22;p1.print();p1.print("王小早",19);p1.print("金波",18,100325);p1.print("婉寧",25,110903);}}在上面的程序中,可以看到Person類中有多個名為 void print的方法,這就是方法的重載。執行程序,運行結果如下:姓名:李明年齡:22姓名:王小早年齡:l9姓名:金波年齡:18ID號:10 00325姓名:婉寧年齡:25ID號:110903在方法重載時,方法之間需要存在一定的聯系,因為這樣可以提高程序的可讀性,一般只重載功能相似的方法重載規則。重載是指我們可以定義一些名稱相同的方法,通過定義不同的參數來區分這些方法,然后再調用時,Java虛擬機就會根據不同的參數列表來選擇合適的方法執行。也就是說,當一個重載方法被調用時,Java用參數的類型和.. (或)個數來決定實際調用的重載方法。因此,每個重載方法的參數的類型或個數必須是不同。雖然每個重載方法可以有不同的返回類型,但返回類型并不足以區分所使用的是哪個方法。當Java調用一個重載方法是,參數與調用參數匹配的方法被執行。在使用重載要注意以下的幾點:1.在使用重載時只能通過不同的參數列表,必須具有不同的參數列表。例如,不同的參數類型,不同的參數個數,不同的參數順序。當然,同一方法內的幾個參數類型必須不一樣,例如可以是 fun(int,float),但是不能為 fun(int,int)。2.不能通過訪問權限、返回類型、拋出的異常進行重載。3.方法的異常類型和數目不會對重載造成影響。..4.可以有不同的返回類型,只要參數列表不同就可以了。5.可以有不同的訪問修飾符。

6.可以拋出不同的異常。

四、方法重寫與方法重載的區別通過上面例子的分析,我們可以將方法重寫和重載的區別總結成這樣一個表格,如下:

區別點

重載

重寫(覆寫)

英文

Overloading

Overiding

定義

方法名稱相同,參數的類型或個數不同

方法名稱、參數類型、返回值類型全部相同

對權限沒有要求

被重寫的方法不能擁有更嚴格的權限

范圍

發生在一個類中

發生在繼承類中

五、結束語在面向對象程序設計的思想中,類的繼承和多態性主要就是體現在子類重寫父類的方法。而構造方法的重載作為方法重載的一個典型特例,可以通過重載構造方法來表達對象的多種初始化行為。靈活的運用方法重寫與方法重載,不僅能減少編碼的工作量,也能大大提高程序的可維護性及可擴展性。用好重寫和重載可以設計一個結構清晰而簡潔的類,可以說重寫和重載在編寫代碼過程中的作用非同一般。參考文獻:(1)李寧 《Java中的方法重寫與方法重載》--科技信息出版社(2)譚貞軍 《Java核心開發技術從入門到精通》 --電子工業出版社

轉載地址:http://blog.csdn.net/zhangyabinsky/article/details/7047330


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 高淳县| 泾源县| 长治市| 兰坪| 禄丰县| 红河县| 临猗县| 澎湖县| 兖州市| 亳州市| 南漳县| 和平县| 阜阳市| 米脂县| 九龙坡区| 陆川县| 淄博市| 金昌市| 睢宁县| 阳信县| 灵武市| 明星| 龙游县| 内乡县| 海口市| 金沙县| 翁牛特旗| 花莲县| 滕州市| 横山县| 颍上县| 康乐县| 常宁市| 香河县| 延吉市| 兴义市| 凤凰县| 全椒县| 北川| 湄潭县| 塘沽区|