1. 程式人生 > >Java重寫Override和過載Overload

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