Java重寫Override和重載Overload

轉載請標明出處:http://blog.csdn.net/wu_wxc/article/details/51457528
本文出自【吳孝城的CSDN博客】

重寫是子類對父類中允許訪問的的方法的重新編寫
重載是同一類中方法名相同,但返回值類型或參數有所不同的方法的重新加載

Override(重寫)

package cn.wuxiaocheng;

class Animal {
    public void eat() {
        System.out.println("動物都需要吃東西");
    }
}

class Dog extends Animal {
    // 重寫父類方法
    @Override
    public void eat() {
        System.out.println("狗喜歡啃骨頭");
    }
}

public class Test {

    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.eat();
    }
}

結果如圖
這裏寫圖片描述

@Override表明這個方法是重寫其父類方法,沒有它不會報錯,但是沒有它時,下面重寫的方法名寫錯時系統不會報修。

重寫的注意事項

1、聲明爲final的方法不能被重寫
2、聲明爲static的方法可以被再次聲明,但不能被重寫
3、子類和父類在同一包中時,子類可以重寫父類中除了聲明爲private或final的其他所有方法
4、子類和父類不在同一包中時,子類只能重寫父類中聲明爲public或protected的非fnial方法
5、構造方法不能被重寫

Overload(重載)

package cn.wuxiaocheng;

class MyOverloading {
    // 沒有參數
    public void people() {
        System.out.println("沒有參數");
    }

    // 參數爲String
    public void people(String name) {
        System.out.println(name);
    }

    // 參數爲int,返回int類型的值
    public int people(int age) {
        System.out.println(age);
        return age;
    }

    // 參數爲String, int
    public void people(String name, int age) {
        System.out.println("name:" + name + "," + "age:" + age);
    }

    // 參數爲int, String
    public void people(int age, String name) {
        System.out.println("age:" + age + "name:" + name);
    }
}

public class Test {

    public static void main(String[] args) {
        MyOverloading myOverloading = new MyOverloading();
        myOverloading.people();
        myOverloading.people("名字");
        myOverloading.people(20);
        myOverloading.people("名字", 20);
        myOverloading.people(20, "名字");
    }
}

結果如圖
這裏寫圖片描述

重載和重寫的區別

區別點 重載方法 重寫方法
方法名 相同 相同
返回值類型 可以修改 相同
參數 參數不同或參數順序不同 相同
訪問修飾符權限 沒有要求 被重寫的方法權限不得比父類嚴格
範圍 同一類中 在繼承中

訪問權限比較

修飾符 當前類 同一包 子孫類 全可見
private
default
protected
public

其中什麼都沒寫的就是default,有的也叫friendly

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章