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

完全掌握Java中的方法重寫

WBOY
WBOY轉載
2022-07-29 15:22:451748瀏覽

本篇文章為大家帶來了關於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中文網其他相關文章!

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