Java繼承方法重寫(xiě)實(shí)現(xiàn)原理及解析
這篇文章主要介紹了Java繼承方法重寫(xiě)實(shí)現(xiàn)原理及解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
在Java繼承中,子類可以獲得父類所有的結(jié)構(gòu),也可以增加與父類不同的屬性和方法。但是,有一種情況,一個(gè)相同的方法,子類的行為并不像父類那樣,這時(shí),就需要重寫(xiě)父類的方法,下面是重寫(xiě)的代碼實(shí)現(xiàn):
代碼體現(xiàn)
package com.my.pac12;
/**
* @author Summerday
* @date 2019/12/11 21:26
*/
public class Person {
public void say(){
System.out.println("say something..");
}
public static void see(){
System.out.println("see something..");
}
public int returnNumber(int number){
return number;
}
private void run(){
System.out.println("running ..");
}
public Person returnPerson(){
return this;
}
}
class student extends Person{
//方法名相同,形參列表相同
public void say(){
System.out.println("student say something..");
}
//返回類型為父類或父類的子類
public Person returnPerson(){
System.out.println("子類返回類型可以是父類返回類型或者是其子類類型");
return this;
}
//并不是重寫(xiě),只是重新定義了新方法
public void run(){
System.out.println("student is running..");
}
//不是重寫(xiě),而是發(fā)生在父類與子類之間的重載
public int returnNuber(int number,int otherNumber){
return number+otherNumber;
}
public static void main(String[] args) {
student s = new student();
s.say();
student.see();
s.see();
s.run();
//涉及向上轉(zhuǎn)型
Person sn = s.returnPerson();
//調(diào)用的是父類的方法
System.out.println(s.returnNumber(5));
//調(diào)用子類重載父類的方法
System.out.println(s.returnNuber(5,5));
}
}
概念
子類包含與父類同名,同參數(shù)列表的現(xiàn)象就是方法重寫(xiě)(Override),也叫方法覆蓋。
注意事項(xiàng)
"兩同兩小一大"
方法名相同,形參列表相同。
子類方法返回值類型小于等于父類方法返回值類型。
//父類
public int returnNumber(int number){
return number;
}
/*基本類型:子類返回值類型小于等于父類返回值類型,下面的語(yǔ)句不允許*/
//子類
public long returnNumber(int number)
//父類
public void say(){
System.out.println("say something..");
}
/*void類型只能由同樣void類型的方法重寫(xiě)*/
//子類
public void say(){
System.out.println("student say something..");
}
//父類
public Person returnPerson(){
return this;
}
/*引用類型:子類返回值類型需要與父類相同或者是父類的子類*/
//子類
public Person returnPerson(){
System.out.println("子類返回類型可以是父類返回類型或者是其子類類型");
return this;
}
子類方法聲明拋出的異常類小于等于父類拋出的異常類。(這個(gè)部分之后再進(jìn)行補(bǔ)充)
子類方法的訪問(wèn)權(quán)限大于等于父類方法的訪問(wèn)權(quán)限。
//父類
public void say(){
System.out.println("say something..");
}
/*子類方法的訪問(wèn)權(quán)限大于等于父類方法的訪問(wèn)權(quán)限,下面的語(yǔ)句不允許*/
//子類
private(protected or 缺省) void say()
其他注意點(diǎn)
兩者必須同為類方法或者同為實(shí)例方法。(實(shí)際上類方法無(wú)法被重寫(xiě),只是單純被隱藏起來(lái),關(guān)于static關(guān)鍵字之后再總結(jié))
//父類
public static void see(){
System.out.println("see something..");
}
/*兩者必須同為類方法(static修飾)或者同為實(shí)例方法,下面的語(yǔ)句不允許*/
//子類
public void see()
父類被private修飾,子類無(wú)法重寫(xiě)父類。
//父類
private void run(){
System.out.println("running ..");
}
/*子類無(wú)法重寫(xiě)方法,下面的語(yǔ)句是假象,其實(shí)是重新定義了一個(gè)新方法*/
//子類
public void run(){
System.out.println("student is running..");
}
重寫(xiě)與重載
重載主要(對(duì)!是主要)發(fā)生在同一個(gè)類的多個(gè)同名方法之間,且參數(shù)列表不同。
為什么說(shuō)是主要呢,因?yàn)橹剌d有可能在子類與父類之間發(fā)生,如下:
//父類
public int returnNumber(int number){
return number;
}
/*發(fā)生在父類與子類之間的重載*/
//子類
public int returnNuber(int number,int otherNumber){
return number+otherNumber;
}
重寫(xiě)是發(fā)生在父類與子類同名方法之間,且參數(shù)列表相同。
@Override注解
@Override注解對(duì)方法重寫(xiě)起到輔助作用,并不會(huì)對(duì)代碼本身產(chǎn)生影響。
標(biāo)注該注解,向人表明下面的方法將要重寫(xiě)父類的某些方法。
標(biāo)注該注解,向機(jī)器表明下面部分將要重寫(xiě),讓機(jī)器幫忙檢查錯(cuò)誤。如果不是重寫(xiě),那么就會(huì)產(chǎn)生讓人不舒服的提示,如圖所示。

上圖也驗(yàn)證了三種不是方法重寫(xiě)的例子:
- static修飾的父類方法。
- private修飾的父類方法。
- 子類重載而非重寫(xiě)父類方法。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java自動(dòng)生成趨勢(shì)比對(duì)數(shù)據(jù)的方法分享
這篇文章主要和大家分享了一種Java自動(dòng)生成趨勢(shì)比對(duì)數(shù)據(jù)的方法設(shè)計(jì)及實(shí)現(xiàn),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-04-04
Java教程package和import訪問(wèn)控制的步驟詳解
這篇文章主要為大家介紹了Java教程package和import訪問(wèn)控制的步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06
servlet下載文件實(shí)現(xiàn)代碼詳解(五)
這篇文章主要為大家詳細(xì)介紹了servlet下載文件的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09
java序列化與ObjectOutputStream和ObjectInputStream的實(shí)例詳解
這篇文章主要介紹了java序列化與ObjectOutputStream和ObjectInputStream的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文能幫助到大家,需要的朋友可以參考下2017-09-09
Lucene實(shí)現(xiàn)索引和查詢的實(shí)例講解
下面小編就為大家分享一篇Lucene實(shí)現(xiàn)索引和查詢的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12
springboot實(shí)現(xiàn)返回視圖而不是string的方法
這篇文章主要介紹了springboot實(shí)現(xiàn)返回視圖而不是string的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01
Java按照List內(nèi)存儲(chǔ)的對(duì)象的某個(gè)字段進(jìn)行排序的實(shí)例
下面小編就為大家?guī)?lái)一篇Java按照List內(nèi)存儲(chǔ)的對(duì)象的某個(gè)字段進(jìn)行排序的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-12-12

