一文解析Java中的方法重寫
1.含義
子類繼承父類后,可以在子類中書寫一個與父類同名同參的方法,從而實現(xiàn)對父類中同名同參數(shù)的方法的覆蓋,我們把這一過程叫做方法的重寫(override)
2.為什么要使用方法重寫
2.1 當(dāng)父類的方法滿足不了子類的需求的時候,需要在子類中對該方法進(jìn)行重寫
2.2 題目與分析
例如存在一個父類Peple,子類Chinese,父類中有一個say()方法,輸出人在說話,但是我想要的時子類時候調(diào)用時輸出中國人在說話,很顯然直接調(diào)用方法不行,所以需要在子類中對say方法進(jìn)行方法的重寫
2.3 示例代碼
People類
public class Peple {
private String name;
private String sex;
private int age;
private int weight;
public Peple() {
}
public Peple(String name, String sex, int age, int weight) {
this.name = name;
this.sex = sex;
this.age = age;
this.weight=weight;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
public void say(){
System.out.println("人在說話");
}
}
Chinese類
public class Chinese extends Peple{
public Chinese() {
}
@Override
public void say() {
System.out.println("中國人在說話");
}
}Test03類
public class Test03 {
public static void main(String[] args) {
Chinese c=new Chinese();
c.say();
//當(dāng)進(jìn)行方法重寫時,調(diào)用的是子類的say()方法
}
}
2.4 示例代碼運行截圖

3.如何使用方法重寫
3.1 基本語法
@Override
權(quán)限修飾符 返回值類型 方法名(形參列表){
//子類重寫的方法的權(quán)限修飾符的訪問權(quán)限必須大于等于父類的,但是父類不能是private
//當(dāng)父類的返回值類型為基本數(shù)據(jù)類型或者為void時,子類方法的返回值類型也應(yīng)該為對應(yīng)的基本數(shù)據(jù)類型或者void
}
3.2 具體分析
3.2.1 子類重寫的方法的訪問權(quán)限應(yīng)該大于等于父類方法的訪問權(quán)限
a 示例代碼
People類
public class Peple {
private String name;
private String sex;
private int age;
private int weight;
public Peple() {
}
public Peple(String name, String sex, int age, int weight) {
this.name = name;
this.sex = sex;
this.age = age;
this.weight=weight;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
//沒有寫訪問權(quán)限的話,默認(rèn)是default訪問權(quán)限
void say(){
System.out.println("人在說話");
}
}
Chinese類
public class Chinese extends Peple{
public Chinese(){
}
//父類say方法的訪問權(quán)限為default,子類say方法的訪問權(quán)限為public,
// 符合子類方法訪問權(quán)限大于等于父類方法訪問權(quán)限的要求
@Override
public void say() {
System.out.println("中國人在說話");
}
}Test03類
public class Test03 {
public static void main(String[] args) {
Chinese c=new Chinese();
c.say();
}
}b 示例代碼運行截圖

3.2.2 當(dāng)父類方法的返回值類型為基本數(shù)據(jù)類型時,子類重寫的方法的返回值類型也為對應(yīng)的基本數(shù)據(jù)類型
a 示例代碼
People類
public class Peple {
private String name;
private String sex;
private int age;
private int weight;
public Peple() {
}
public Peple(String name, String sex, int age, int weight) {
this.name = name;
this.sex = sex;
this.age = age;
this.weight=weight;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
public double add(int a,int b){
return a+b;
}
}Chinese類
public class Chinese extends Peple{
public Chinese(){
}
@Override
public double add(int a,int b) {
return a+b+1;
}
}Test03類
public class Test03 {
public static void main(String[] args) {
Chinese c=new Chinese();
System.out.println("求和之和再加上1的結(jié)果為: "+c.add(2, 3));
}
}b 示例代碼運行截圖

3.2.3 當(dāng)父類方法的返回值類型為void時,子類重寫的方法的返回值類型也為void
a 示例代碼
People類
public class Peple {
private String name;
private String sex;
private int age;
private int weight;
public Peple() {
}
public Peple(String name, String sex, int age, int weight) {
this.name = name;
this.sex = sex;
this.age = age;
this.weight=weight;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
public void eat(){
System.out.println("人的主食一般是熟食");
}
}Chinese類
public class Chinese extends Peple{
public Chinese(){
}
@Override
public void eat() {
System.out.println("中國人的主食是大米或者小麥");
}
}Test03類
public class Test03 {
public static void main(String[] args) {
Chinese c=new Chinese();
c.eat();
}
}
b 示例代碼運行截圖

3.2.4 當(dāng)父類的方法被static修飾的時候,子類是不能重寫該方法的
a 錯誤示例代碼
People類
public class Peple {
private String name;
private String sex;
private int age;
private int weight;
public Peple() {
}
public Peple(String name, String sex, int age, int weight) {
this.name = name;
this.sex = sex;
this.age = age;
this.weight=weight;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
public static void eat(){
System.out.println("人的主食一般是熟食");
}
}Chinese類
public class Chinese extends Peple{
public Chinese(){
}
@Override
public void eat() {
System.out.println("中國人的主食是大米或者小麥");
}
}Test03類
public class Test03 {
public static void main(String[] args) {
Chinese c=new Chinese();
c.eat();
}
}
b 示例代碼運行截圖
編譯時idea給出的錯誤提示

強制運行后給出的錯誤提示

3.3 方法重寫的一些小技巧
3.3.1 復(fù)制法
步驟
1.先直接復(fù)制(Ctrl+C)父類中需要被子類重寫的那個方法
2.粘貼(Ctrl+V)到子類中
3.修改子類中的功能,便于實現(xiàn)父類實現(xiàn)不了的需求
操作截圖展示


3.3.2 編譯器提示法
步驟
1.先在子類類體中,非方法內(nèi)位置,寫入一個英文@符號
2.選中提示中的Overide/implement methods…
3.雙擊后彈出一個重寫方法選擇列表彈窗
4.根據(jù)提示選中對應(yīng)的需要重寫的方法
5.點擊ok按鈕后會在子類中生成一個你選中方法的重寫方法
6.把生成的重寫方法中的自動生成的首行去掉,然后根據(jù)需求在方法體里面寫入合適的語句
操作截圖展示



3.3.3 快捷鍵法
步驟
1.把鼠標(biāo)移動到重寫方法應(yīng)該生成的位置
2.同時按下鍵盤上的Alt鍵和Insert鍵,
3.在彈出框中,選中Override Methods
4.雙擊后會彈出一個界面,在界面中選中需要被子類重寫的方法
5.點擊OK按鈕后會生成所需要的重寫方法
6.去掉重寫方法中自動生成的首行,然在其方法體里面寫入合適的語句
操作截圖展示




以上就是一文解析Java中的方法重寫的詳細(xì)內(nèi)容,更多關(guān)于Java方法重寫的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
SpringBoot靜態(tài)資源css,js,img配置方案
這篇文章主要介紹了SpringBoot靜態(tài)資源css,js,img配置方案,下文給大家分享了三種解決方案,需要的朋友可以參考下2017-07-07
出現(xiàn)次數(shù)超過一半(50%)的數(shù)
給出n個數(shù),需要我們找出出現(xiàn)次數(shù)超過一半的數(shù),下面小編給大家分享下我的實現(xiàn)思路及關(guān)鍵代碼,感興趣的朋友一起學(xué)習(xí)吧2016-07-07
java高并發(fā)ScheduledThreadPoolExecutor類深度解析
這篇文章主要為大家介紹了java高并發(fā)ScheduledThreadPoolExecutor類源碼深度解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
logback ThrowableProxyConverter類源碼流程解析
這篇文章主要為大家介紹了logback ThrowableProxyConverter類源碼流程解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12

