龍 軍
(??诮洕鷮W院 海南 ???570203)
在面向對象的程序設計中,多態(tài)指的是一個名詞可以有多個語義,Java 的多態(tài)性是通過繼承中的覆蓋(動態(tài)多態(tài)性)和方法的重載(靜態(tài)多態(tài)性)實現(xiàn)的。
Java 允許在一個類中有同名的多個方法存在,但要求參數(shù)列表不同,叫做方法重載。 這里的方法指具有相似功能的成員方法或構造方法,不同的參數(shù)列表指的是方法的參數(shù)個數(shù)或參數(shù)的數(shù)據(jù)類型或對應位置上的參數(shù)類型不同。 筆者通過下面的例子做一說明,首先做一個名叫ffcz 的類,在其中分別編寫幾個同名方法,再做一個名叫cz 的Application 類,在main 方法中生成ffcz 類的對象實例,依次調用成員方法并體現(xiàn)結果。
1.1.1 在類中聲明String 類型的成員變量mc。
1.1.2 編寫傳入一個字符串參數(shù)的方法,直接將傳入?yún)?shù)的值賦給成員變量。
1.1.3 編寫傳入字符串和整數(shù)兩個參數(shù)的方法,按第二個參數(shù)對第一個參數(shù)處理后賦給成員變量。
1.1.4 編寫傳入一個整數(shù)參數(shù)的方法,根據(jù)傳入?yún)?shù)的值給成員變量賦值。
1.1.5 編寫傳入兩個字符串參數(shù)的方法,將兩個參數(shù)連到一起賦給成員變量。
在main 方法中生成ffcz 類對象的實例,再調用各set_mc方法并體現(xiàn)成員變量mc。
結果表明Java 的編譯器會根據(jù)參數(shù)列表的不同來選擇具體調用的方法。
當子類的成員變量和父類的成員變量同名時,父類的成員變量被隱藏,如果是成員方法同名,父類的成員方法被覆蓋,也叫方法重寫。 重寫要求子類和父類有相同的方法名稱,且返回類型及參數(shù)列表也完全相同。 當子類方法的訪問權限與父類的不同時,要求子類方法的權限更大。 筆者通過構建一個父類(ffcx)、一個子類(ffcx1)和一個Application 類(cx),在父類中編寫一個構造方法和設置字符串的的方法,采用子類中無方法和重寫父類寫方法兩種形式,在cx 中體現(xiàn)結果。
2.1.1 編寫父類ffcx,在父類中聲明一字符串如mc,再編寫構造方法給mc 賦初值,編寫set_mc 方法,將傳入的參數(shù)值賦給mc。
2.1.2 編寫空的子類ffcx1。
public class ffcx1 extends ffcx{ }
2.1.3 編寫Application 類cx,在main 方法中生成ffcx1 的對象實例,并體現(xiàn)出mc。
ffcx1 o1=new ffcx1();
System.out.println(o1.mc);
o1.set_mc("這是關于方法重寫的示例");
System.out.println(o1.mc);
2.1.4 運行結果分析,運行Application 類。
結果表明,雖然ffcx1 類體中沒有任何代碼,但父類中屬性和方法被子類繼承了。
2.2.1 在子類中重寫構造方法和set_mc 方法,賦給mc 不同的值。
2.2.2 運行結果分析,運行Application 類。
結果表明,當在子類中加入與父類同名的方法后,程序調用的是子類的方法,即子類重寫了父類的方法。
重載和重寫的方法名稱都相同,但重載要求參數(shù)列表不同,重寫要求參數(shù)列表完全相同。 重載是在一個類中,對方法前面的修飾符沒有限制,重寫是子類對父類方法重寫,對修飾符的使用有限制。
總之,Java 的多態(tài)性就是“一個接口,多種方法”。 通過重載和重寫,提高了程序的可讀性和可擴展性,使類的結構更加清晰、簡潔。
[1]胡書敏.Java 第一步[M].清華大學出版社,ISBN:7-302-18607-6.
[2]雍俊海.Visual C++大學教程[M].清華大學出版社,ISBN:7-302-12671-3.