首先我們來說一下@override的一般作用是什么:
1、幫助自己檢查是否正確地復(fù)寫了父類中已有的方法;
2、告訴讀代碼的人,這是一個(gè)復(fù)寫的方法。
舉例說明:
比如現(xiàn)在我們有一個(gè)基類:
立即學(xué)習(xí)“Java免費(fèi)學(xué)習(xí)筆記(深入)”;
(視頻教程推薦:java視頻教程)
現(xiàn)在我們編寫一個(gè)Apple子類,繼承這個(gè)基類,并且復(fù)寫基類中的show_name()方法。
執(zhí)行的結(jié)果就是會(huì)打印出Apple:2字樣。
其實(shí),在我們手工復(fù)寫父類的方法時(shí),容易把方法的參數(shù)記錯(cuò),如果此時(shí)不加@Override的話,編輯器就不會(huì)提示你:例如我們不加這個(gè)標(biāo)簽,悄悄的把參數(shù)改為float型。
?這個(gè)時(shí)候,其實(shí)我們并沒有按照我們的意圖成功復(fù)寫方法,于是一個(gè)隱藏的bug就這樣誕生了,相反加上Override的效果就是
IDE給出了錯(cuò)誤提示,說明我們復(fù)寫方法失敗。
往往就是我們準(zhǔn)備復(fù)寫方法的時(shí)候結(jié)果,相反我們是重載了方法。
再比如:現(xiàn)在我們向Fruit類中添加一個(gè)私有方法,而在Apple中嘗試復(fù)寫
@Override private void grow(){ }
結(jié)果編譯器會(huì)提示錯(cuò)誤,這是一個(gè)非常低級(jí)的錯(cuò)誤,但是有時(shí)候恰恰就不會(huì)被我們發(fā)現(xiàn):那就是試著復(fù)寫私有方法,但是當(dāng)我們?nèi)サ鬙verride標(biāo)簽的時(shí)候,編譯器是不會(huì)報(bào)錯(cuò)的,而且可以執(zhí)行。
其實(shí)Apple中的你所謂復(fù)寫的grow只是一個(gè)針對(duì)于Apple本身的私有方法。完全是一個(gè)新的方法。
這就引出了一個(gè)問題,何為復(fù)寫?
在面向?qū)ο笾?,只有接口和共有方法,繼承方法才有復(fù)寫,私有方法不可以復(fù)寫,但是又想了一下,才明白:不是不可以復(fù)寫,而是根本就不存在復(fù)寫私有方法的概念!
這正是面向?qū)ο笤O(shè)計(jì)的初衷,私有方法本身就是為了封裝在類內(nèi)部,不希望別人來更改或者外部引用的。
推薦教程:java入門程序
以上就是java中的@Override有什么作用的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!
java怎么學(xué)習(xí)?java怎么入門?java在哪學(xué)?java怎么學(xué)才快?不用擔(dān)心,這里為大家提供了java速學(xué)教程(入門到精通),有需要的小伙伴保存下載就能學(xué)習(xí)啦!
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://www.miracleart.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)