Java繼承方法重寫實現原理及解析
這篇文章主要介紹了Java繼承方法重寫實現原理及解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
在Java繼承中,子類可以獲得父類所有的結構,也可以增加與父類不同的屬性和方法。但是,有一種情況,一個相同的方法,子類的行為并不像父類那樣,這時,就需要重寫父類的方法,下面是重寫的代碼實現:
代碼體現
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;
}
//并不是重寫,只是重新定義了新方法
public void run(){
System.out.println("student is running..");
}
//不是重寫,而是發(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();
//涉及向上轉型
Person sn = s.returnPerson();
//調用的是父類的方法
System.out.println(s.returnNumber(5));
//調用子類重載父類的方法
System.out.println(s.returnNuber(5,5));
}
}
概念
子類包含與父類同名,同參數列表的現象就是方法重寫(Override),也叫方法覆蓋。
注意事項
"兩同兩小一大"
方法名相同,形參列表相同。
子類方法返回值類型小于等于父類方法返回值類型。
//父類
public int returnNumber(int number){
return number;
}
/*基本類型:子類返回值類型小于等于父類返回值類型,下面的語句不允許*/
//子類
public long returnNumber(int number)
//父類
public void say(){
System.out.println("say something..");
}
/*void類型只能由同樣void類型的方法重寫*/
//子類
public void say(){
System.out.println("student say something..");
}
//父類
public Person returnPerson(){
return this;
}
/*引用類型:子類返回值類型需要與父類相同或者是父類的子類*/
//子類
public Person returnPerson(){
System.out.println("子類返回類型可以是父類返回類型或者是其子類類型");
return this;
}
子類方法聲明拋出的異常類小于等于父類拋出的異常類。(這個部分之后再進行補充)
子類方法的訪問權限大于等于父類方法的訪問權限。
//父類
public void say(){
System.out.println("say something..");
}
/*子類方法的訪問權限大于等于父類方法的訪問權限,下面的語句不允許*/
//子類
private(protected or 缺省) void say()
其他注意點
兩者必須同為類方法或者同為實例方法。(實際上類方法無法被重寫,只是單純被隱藏起來,關于static關鍵字之后再總結)
//父類
public static void see(){
System.out.println("see something..");
}
/*兩者必須同為類方法(static修飾)或者同為實例方法,下面的語句不允許*/
//子類
public void see()
父類被private修飾,子類無法重寫父類。
//父類
private void run(){
System.out.println("running ..");
}
/*子類無法重寫方法,下面的語句是假象,其實是重新定義了一個新方法*/
//子類
public void run(){
System.out.println("student is running..");
}
重寫與重載
重載主要(對!是主要)發(fā)生在同一個類的多個同名方法之間,且參數列表不同。
為什么說是主要呢,因為重載有可能在子類與父類之間發(fā)生,如下:
//父類
public int returnNumber(int number){
return number;
}
/*發(fā)生在父類與子類之間的重載*/
//子類
public int returnNuber(int number,int otherNumber){
return number+otherNumber;
}
重寫是發(fā)生在父類與子類同名方法之間,且參數列表相同。
@Override注解
@Override注解對方法重寫起到輔助作用,并不會對代碼本身產生影響。
標注該注解,向人表明下面的方法將要重寫父類的某些方法。
標注該注解,向機器表明下面部分將要重寫,讓機器幫忙檢查錯誤。如果不是重寫,那么就會產生讓人不舒服的提示,如圖所示。

上圖也驗證了三種不是方法重寫的例子:
- static修飾的父類方法。
- private修飾的父類方法。
- 子類重載而非重寫父類方法。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Spring聲明式事務@Transactional知識點分享
在本篇文章里小編給大家整理了關于Spring聲明式事務@Transactional詳解內容,需要的朋友們可以參考下。2020-02-02
Java生成訂單號或唯一id的高并發(fā)方案(4種方法)
本文主要介紹了Java生成訂單號或唯一id的高并發(fā)方案,包括4種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2024-01-01
SpringBoot實現WebSocket服務并讓客戶端實時接收
使用SpringBoot和WebSocket可創(chuàng)建實時消息推送服務,首先添加WebSocket依賴至pom.xml,配置WebSocket端點和邏輯處理器,通過WebSocketHandler處理消息,使用AnnouncementController模擬消息推送,支持HTML和微信小程序客戶端接收消息,感興趣的可以了解一下2024-10-10

