這篇文章給大家分享的是有關(guān)Java中override和overload有什么用區(qū)別的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

成都創(chuàng)新互聯(lián)公司從2013年成立,我們提供高端網(wǎng)站建設(shè)、微信小程序開(kāi)發(fā)、電商視覺(jué)設(shè)計(jì)、成都app軟件開(kāi)發(fā)公司及網(wǎng)絡(luò)營(yíng)銷(xiāo)搜索優(yōu)化服務(wù),在傳統(tǒng)互聯(lián)網(wǎng)與移動(dòng)互聯(lián)網(wǎng)發(fā)展的背景下,我們堅(jiān)守著用標(biāo)準(zhǔn)的設(shè)計(jì)方案與技術(shù)開(kāi)發(fā)實(shí)力作基礎(chǔ),以企業(yè)及品牌的互聯(lián)網(wǎng)商業(yè)目標(biāo)為核心,為客戶打造具商業(yè)價(jià)值與用戶體驗(yàn)的互聯(lián)網(wǎng)+產(chǎn)品。
Java語(yǔ)法如此多嬌,引無(wú)數(shù)英雄競(jìng)折腰。
(1)override:
class Parent{
Object func(Number n){
...
}
}
class Child extendsParent{
Object func(Number n){
...
}
}
This is so-called override.
override的含義,就是俗稱的“多態(tài)”
Child.func和Parent.func可以看作是占用了虛函數(shù)指針表里面的同一個(gè)Entry.即:Child.func覆蓋了Parent.func.
Parent vtable
Entry 1:Parent.func
Child vtable
Entry 1:Child func
override是程序運(yùn)行時(shí)動(dòng)態(tài)決定調(diào)用哪個(gè)method,所以稱為:多態(tài)性.
(2)overload
class Child{
Object func(Number n){
...
}
Object func(String s){
...
}
}
This is so-called overload.
Note:兩個(gè)func方法同名,但參數(shù)不一樣,完全是不相同的方法。這兩個(gè)func方法在虛函數(shù)指針表中占用了兩個(gè)不同的Entry.
vtable
void func(Number)
void func(String)
Attention:
overload編譯時(shí)就決定了調(diào)用哪個(gè)方法,編譯器根據(jù)參數(shù)類型的不同,產(chǎn)生了不同的調(diào)用函數(shù)地址(不同的Entry)的JVM指令.
BTW:overload怎么翻譯成了重載,實(shí)在想不明白.overload英文本義是“超載”.我強(qiáng)烈懷疑“重載”這個(gè)詞是生造詞,就像“阿爾卑斯白”這樣的詞.只可意會(huì),不可言傳.
(3)
class Parent{
Object func(Number n){
...
}
}
class Child extendsParent{
Object func(String s){
...
}
}
This is also overload.
parent vtable
Entry 1:void func(Number n) of parent
child vtable
Entry 1:void func(Number n) of parent
Entry 2:void func(String s) of child
(4)
class Parent{
Object func(Number n){
...
}
}
class Child extends Parent{
Object func(Number n){
...
}
Object func(String s){
...
}
}
This example code has both override and overload.
parent vtable
Entry 1:void func(Number n) of parent
child vtable
Entry 1:void func(Number n) of child
Entry 2:void func(String s) of child
=>Conclusion:
a:Strongly advise to avoid using "overload".
b:Strongly advise to use different method names.
For instance:
Objcet funcNumber(Number n){
...
}
Object funcString(String s){
...
}
End.
感謝各位的閱讀!關(guān)于“Java中override和overload有什么用區(qū)別”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
文章標(biāo)題:Java中override和overload有什么用區(qū)別
文章起源:http://www.chinadenli.net/article46/iiiheg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、Google、定制網(wǎng)站、手機(jī)網(wǎng)站建設(shè)、ChatGPT、標(biāo)簽優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)