搜尋
首頁常見問題完全掌握Java中的方法重寫

本篇文章為大家帶來了關於java的相關知識,子類別繼承父類別後,可以在子類別中書寫一個與父類別同名同參的方法,從而實現對父類別中同名同參數的方法的覆蓋,我們把這一過程叫做方法的重寫,下面一起來看一下,希望對大家有幫助。

完全掌握Java中的方法重寫

推薦學習:《java影片教學

1.意思

子類別繼承父類別後,可以在子類別中書寫一個與父類別同名同參的方法,從而實現對父類別中同名同參數的方法的覆蓋,我們把這一過程叫做方法的重寫(override)

2.為什麼要使用方法重寫

2.1 當父類別的方法滿足不了子類別的需求的時候,需要在子類別中對該方法進行重寫

2.2 題目與分析

例如存在一個父類Peple,子類Chinese,父類中有一個say()方法,輸出人在說話,但是我想要的時子類時候調用時輸出中國人在說話,很顯然直接呼叫方法不行,所以需要在子類別中對say方法進行方法的重寫

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();
        //当进行方法重写时,调用的是子类的say()方法
    }
}

2.4 範例程式碼運行截圖

3.如何使用方法重寫

#3.1 基本語法

@Override
权限修饰符 返回值类型 方法名(形参列表){
    //子类重写的方法的权限修饰符的访问权限必须大于等于父类的,但是父类不能是private
    //当父类的返回值类型为基本数据类型或者为void时,子类方法的返回值类型也应该为对应的基本数据类型或者void
  
}

3.2 具體分析

#3.2.1 子類別重寫的方法的存取權限應該大於等於父類別方法的存取權限

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;
    }
    //没有写访问权限的话,默认是default访问权限
    void say(){
        System.out.println("人在说话");
    }

}

Chinese類別

public class Chinese extends Peple{
    public Chinese(){
    }
    //父类say方法的访问权限为default,子类say方法的访问权限为public,
    // 符合子类方法访问权限大于等于父类方法访问权限的要求
    @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 當父類別方法的傳回值類型為基本資料型別時,子類別重寫的方法的傳回值型別也為對應的基本資料型別

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的结果为: "+c.add(2, 3));
    }
}

b 範例程式碼執行截圖

#3.2.3 當父類別方法的傳回值類型為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 當父類別的方法被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 複製法

步驟

1.先直接複製(Ctrl C)父類別中需要被子類別重寫的那個方法

2.貼上(Ctrl V)到子類別中

3 .修改子類別中的功能,便於實作父類別實作不了的需求

操作截圖展示

3.3 .2 編譯器提示法

步驟

1.先在子類別體中,非方法內位置,寫入一個英文@符號

2.選取提示中的Overide/implement methods…

3.雙擊後彈出一個重寫方法選擇列表彈窗

4.根據提示選取對應的需要重寫的方法

# 5.點擊ok按鈕後會在子類別中產生一個你選中方法的重寫方法

6.把生成的重寫方法中的自動生成的首行去掉,然後根據需求在方法體裡面寫入適當的語句

操作截圖展示

#3.3.3快速鍵法

步驟

1.把滑鼠移到重寫方法應該產生的位置

2.同時按下鍵盤上的Alt鍵和Insert鍵,

3.在彈出框中,選取Override Methods

4.雙擊後會彈出一個介面,在介面中選取需要被子類別重寫的方法

5.點選OK按鈕後會產生所需的重寫方法

6.去掉重寫方法中自動產生的首行,然在其方法體裡面寫入適當的語句

操作截圖展示

#推薦學習:《java影片教學

以上是完全掌握Java中的方法重寫的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:脚本之家。如有侵權,請聯絡admin@php.cn刪除

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),