重載與重寫(xiě)的區(qū)別

重載與重寫(xiě)是完全不同的語(yǔ)法現(xiàn)象,區(qū)別如下所示:

重載: 是指在一個(gè)類中定義多個(gè)方法名相同但參數(shù)列表不同的方法,在編譯時(shí),根據(jù)參數(shù)的個(gè)數(shù)和類型來(lái)決定綁定哪個(gè)方法。

重寫(xiě): 是指在子類中定義和父類完全相同的方法,在程序運(yùn)行時(shí),根據(jù)對(duì)象的類型(而不是引用類型)而調(diào)用不同的方法。

class Super {
public void f() {
System.out.println ("super.f()");
??? }
}
class Sub extends Super {
public void f() {
System.out.println ("sub.f()");
??? }
}
class Goo {
public void g(Super obj) {
System.out.println ("g(Super)");?
obj.f();
??? }
public void g(Sub obj) {
System.out.println ("g(Sub) ");
obj.f();
??? }
}
class Test{
??? public static void main(String[] args){
??????? Super obj = new Sub();
Goo goo = new Goo();
goo.g(obj);
}
}

分析如上代碼,輸出結(jié)果為:g(Super) sub.f()。

首先,重載遵循所謂“編譯期綁定”,即在編譯時(shí)根據(jù)參數(shù)變量的類型判斷應(yīng)該調(diào)用哪個(gè)方法, 因?yàn)樽兞縪bj為Super類型引用, 所以,Goo的g(Super)被調(diào)用,先輸出g(Super)。

重寫(xiě)遵循所謂“運(yùn)行期綁定”,即在運(yùn)行的時(shí)候,根據(jù)引用變量所指向的實(shí)際對(duì)象的類型來(lái)調(diào)用方法,因?yàn)閛bj實(shí)際指向的是子類Sub的對(duì)象,因此,子類重寫(xiě)后的f方法被調(diào)用,即sub.f()。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 函數(shù)重載(Overload): 1.函數(shù)名稱一樣 2.參數(shù)類型與參數(shù)個(gè)數(shù)不一樣 3.與返回值無(wú)關(guān) 函數(shù)重寫(xiě)(Ove...
    沫晴er閱讀 428評(píng)論 0 0
  • 重載(Overloading) (1) 方法重載是讓類以統(tǒng)一的方式處理不同類型數(shù)據(jù)的一種手段。多個(gè)同名函數(shù)同時(shí)存在...
    飛天_shine閱讀 430評(píng)論 0 0
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 34,692評(píng)論 18 399
  • 重載(Overloading) 方法重載是讓類以統(tǒng)一的方式處理不同類型數(shù)據(jù)的一種手段。多個(gè)同名函數(shù)同時(shí)存在,具有不...
    yeying12321閱讀 13,203評(píng)論 3 5
  • 我是個(gè)新手,寫(xiě)能提供一些關(guān)于小程序連接websocket的原代或事例嗎?謝謝! 官方API寫(xiě)的很詳細(xì) https:...
    優(yōu)莉222閱讀 734評(píng)論 0 0

友情鏈接更多精彩內(nèi)容