- 相關(guān)推薦
方法重載和方法重寫的概念和區(qū)別
方法重載是讓類以統(tǒng)一的方式處理不同類型數(shù)據(jù)的一種手段。下面是小編整理的方法重載和方法重寫的概念和區(qū)別,希望對大家有所幫助。
方法重載和方法重寫的概念和區(qū)別
搜索量:昨日訪問量TOP6000(內(nèi)部統(tǒng)計(jì))載和方法重寫的概念和區(qū)別,希望大家喜歡!
重載:一個(gè)類中有一個(gè)方法A,你又在這個(gè)類中創(chuàng)建了一個(gè)方法B,方法B的名字和A一樣,返回值類型也一樣,但是參數(shù)的類型或個(gè)數(shù)不同,此時(shí)B重載了A。
例如:
public class TestClass{
public int test(int i){return 1;}
public int test(float f){return 1;}
}
重寫:一個(gè)類M繼承另一個(gè)類N,N中有一個(gè)方法A,這時(shí)你在M寫了一個(gè)方法B,方法B的名字、返回值以及參數(shù)都和A一樣,此時(shí)B重寫了A。
例如:
public class TestClass1{
public int test(int i){return 1;}
}
public class TestClass2 extends TestClass1{
public int test(int i){return 2;}
}
方法重載:同一個(gè)類中,方法名相同,參數(shù)不同,方法體不同;
方法重寫:不同的類中,方法體不同,參數(shù)相同,方法名也相同。
(兩同兩不同)
方法重載的作用: 在有多個(gè)同名參數(shù)的類中,在調(diào)用時(shí)通過不同的參數(shù)來調(diào)用不同的方法。
方法重寫的作用: 在繼承中,子類可用方法重寫,對父類進(jìn)行擴(kuò)充或改造。
用java重載的方法
public static double max(double num1, double num2) {
if (num1 > num2)
return num1;
else
return num2;
}
如果你調(diào)用max方法時(shí)傳遞的是int型參數(shù),則 int型參數(shù)的max方法就會(huì)被調(diào)用;
如果傳遞的事double型參數(shù),則double類型的max方法體會(huì)被調(diào)用,這叫做方法重載;
就是說一個(gè)類的兩個(gè)方法擁有相同的名字,但是有不同的參數(shù)列表。
Java編譯器根據(jù)方法簽名判斷哪個(gè)方法應(yīng)該被調(diào)用。
方法重載可以讓程序更清晰易讀。執(zhí)行密切相關(guān)任務(wù)的方法應(yīng)該使用相同的名字。
重載的方法必須擁有不同的參數(shù)列表。你不能僅僅依據(jù)修飾符或者返回類型的不同來重載方法。
PHP中子類重載父類的方法介紹
在PHP中不能定義重名的函數(shù),也包括不能再同一個(gè)類中定義重名的方法,所以也就沒有方法重載。單在子類中可以定義和父類重名的方法,因?yàn)楦割惖姆椒ㄒ呀?jīng)在子類中存在,這樣在子類中就可以把從父類中繼承過來的方法重寫。
子類中重載父類的方法就是在子類中覆蓋從父類中繼承過來的方法,父類中的方法被子類繼承過來不就可以直接使用嗎?為什么還要重載呢?因?yàn)橛幸恍┣闆r我們必須要覆蓋的。例如,有一個(gè)“鳥”類,在這個(gè)類中定義了鳥的通用方法“飛翔”。將“鴕鳥”類作為它的子類,就會(huì)將“飛翔”的方法繼承過來,但只要一調(diào)用“鴕鳥”類中的這個(gè)“飛翔”的方法,鴕鳥就會(huì)飛走。雖然鴕鳥是不會(huì)飛的,但其他特性都具有“鳥類”的特性,所以在聲明“鴕鳥”類時(shí)還是可以繼承“鳥”類的,但必須在“鴕鳥”類中將“鳥”類中繼承過來的“飛翔”方法改寫,就需要在子類中重載父類中的方法。
在下面的例子中,聲明的Person類中有一個(gè)“說話”方法,Student類繼承Person類后可以直接使用“說話”方法。但Person類中的“說話”方法只能說出它自己的成員屬性,而Student類對Person類進(jìn)行了擴(kuò)展,多添加了幾個(gè)新的成員屬性。代碼如下所示:
name = $name;$this ->sex = $sex;$this ->age = $age;}//在人類中聲明一個(gè)通用的說話方法,介紹一下自己function say(){echo "我的名字:".$this-> name.",性別:".$this ->sex.",年齡:".$this ->age."。
";}}//聲明一個(gè)學(xué)生類,使用extends關(guān)鍵字?jǐn)U展(繼承)person類class Student extends Person {private $school; //在學(xué)生類中聲明一個(gè)所在學(xué)校school的成員屬性//覆蓋父類中的構(gòu)造方法,在參數(shù)列表中添加一個(gè)學(xué)校屬性,用來創(chuàng)建對象并初始化成員屬性function __construct($name="",$sex="男",$age=1,$school=""){$this ->name = $name;$this ->sex = $sex;$this ->age = $age;$this ->school = $school;}function study(){echo $this ->name."正在".$this ->school."學(xué)習(xí)
";}//定義一個(gè)和父類中同名的方法,將父類中的說話方法覆蓋并重寫,多說出所在的學(xué)校名稱function say(){echo "我的名字:".$this ->name.",性別:".$this ->sex.",年齡:".$this ->age.",在".$this ->school."學(xué)校上學(xué)
";}}$student= new Student("張三","男",20,"edu"); //創(chuàng)建一個(gè)學(xué)生對象,并傳給一個(gè)學(xué)校名稱參數(shù)$student -> say(); //調(diào)用學(xué)生類中覆蓋父類的說話方法?>
改程序運(yùn)行后輸出的結(jié)果為:
我的名字叫:張三,性別:男,我的年齡是:20,在edu學(xué)校上學(xué)
在PHP中,提供了在子類重載的方法中調(diào)用父類被覆蓋方法的功能。這樣就可以在子類重寫的方法中,繼續(xù)使用從父類繼承過來并被覆蓋的方法,然后再按要求多添加一些新功能。調(diào)用的格式是使用“parent:方法名”在子類的重載方法中調(diào)用父類中被覆蓋的方法。將上例中的代碼修改一下,在子類重寫的構(gòu)造方法中使用“parent::__construct()”調(diào)用父類中被覆蓋的構(gòu)造方法,再多添加一條對子類中新擴(kuò)展的成員屬性初始化的代碼。在子類中重寫的say()方法中使用“parent::say()”調(diào)用父類中被覆蓋的say()方法,再添加上輸出子類成員屬性的功能。
代碼如下所示:
name = $name;$this ->sex = $sex;$this ->age = $age;}//在人類中聲明一個(gè)通用的說話方法,介紹一下自己function say(){echo "我的名字:".$this-> name.",性別:".$this ->sex.",年齡:".$this ->age."!";}}//聲明一個(gè)學(xué)生類,使用extends關(guān)鍵字?jǐn)U展(繼承)person類class Student extends Person {private $school; //在學(xué)生類中聲明一個(gè)所在學(xué)校school的成員屬性//覆蓋父類中的構(gòu)造方法,在參數(shù)列表中添加一個(gè)學(xué)校屬性,用來創(chuàng)建對象并初始化成員屬性function __construct($name="",$sex="男",$age=1,$school=""){//調(diào)用父類中被覆蓋的構(gòu)造方法,為從父類中集成過來額出行賦初值parent::__construct($name,$sex,$age);$this ->school = $school;}function study(){echo $this ->name."正在".$this ->school."學(xué)習(xí)
";}//定義一個(gè)和父類中同名的方法,將父類中的說話方法覆蓋并重寫,多說出所在的學(xué)校名稱function say(){parent::say(); //調(diào)用父類中被本方法覆蓋掉的方法echo "在".$this ->school."學(xué)校上學(xué)
";}}$student= new Student("張三","男",20,"edu"); //創(chuàng)建一個(gè)學(xué)生對象,并傳給一個(gè)學(xué)校名稱參數(shù)$student -> say(); //調(diào)用學(xué)生類中覆蓋父類的說話方法?
上面的例子輸出的結(jié)果和前一個(gè)例子是一樣的,但在本例中通過在子類中直接調(diào)用父類中被覆蓋的方法要簡便很多。另外,在子類覆蓋父類的方法時(shí)一定要注意,在子類中重寫的方法訪問權(quán)限一定不能低于父類被覆蓋的方法的訪問權(quán)限。例如,如果父類中的訪問權(quán)限是protected,那么在子類中重寫的方法的權(quán)限就要是protected或public。
【方法重載和方法重寫的概念和區(qū)別】相關(guān)文章:
方法重載與覆蓋的區(qū)別11-04
方法重載的條件09-23
預(yù)習(xí)的策略和方法04-23
讀書的方法和技巧07-27
讀書方法和心得03-14
學(xué)好英語的方法和技巧01-31
育兒經(jīng)驗(yàn)和方法心得12-03
即興演講的技巧和方法04-23
寫作文的技巧和方法08-04