Java重寫Override和過載Overload
阿新 • • 發佈:2018-10-31
轉載請標明出處: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