這篇文章給大家分享的是有關Java中方法重載和方法重寫的區別有哪些的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
方法重載
方法重載的主要是在一個類當中,方法的方法名相同,參數列表不同,返回值類型可以相同,也可以不同.
/*
這里只是簡單的示例一下,Food Snack沒有給出,意會一下即可.
*/
public class Demo{
public void eat(Food food){
System.out.println("今天正常吃飯!吃了" + food.name);
}
public void eat(Snack snack){
System.out.println("今天想吃零食!吃了" + snack.name);
}
public int eat(){
int money = 10;
System.out.println("今天喝西北風!但是省錢了,返回省錢的數目");
return 10;
}
//public void eat(){
// int money = 10;
// System.out.println("今天喝西北風!但是省錢了,返回省錢的數目");
//}
}注意:如果參數列表相同,返回值類型不同是不算重載的.這種寫法會直接報錯.因為在調用方法的時候,我們還不知道方法的返回值類型,所以編譯器無法區分你調用的是哪個方法,肯定就傻掉了,所以就告訴你,兄弟你寫錯了!
方法的重寫體現在子父類當中,最典型的是子類重寫父類中的方法.
Father類和Son類都有Walk(boolean canRun)方法.
但是執行的時候結果卻不同.
public class Father {
private boolean canRun = false;
public boolean isCanRun() {
return canRun;
}
public void setCanRun(boolean canRun) {
this.canRun = canRun;
}
public void walk(boolean canRun){
if(canRun){
System.out.println("父親盡力跑啊跑!");
}else{
System.out.println("父親老了,只可以走路!");
}
}
}public class Son extends Father{
boolean canRun;
public Son(boolean canRun){
this.canRun = canRun;
}
@Override
public void walk(boolean canRun) {
if(canRun){
System.out.println("兒子可以跑!");
}else{
System.out.println("兒子也只能走!");
}
}
}public class Test {
public static void main(String[] args) {
Father father = new Father();
Son son = new Son(true);
father.walk(father.isCanRun());
son.walk(son.canRun);
}
}這里體現的就是子類Son重寫了父類中的Walk()方法.
注意:重寫這里有一個重要的點在于子類重寫的方法不能低于父類方法的訪問權限.
可以簡單理解一下:在多態當中,父類引用指向子類對象,如果子類對象中重寫的方法權限低于父類方法了,那么多態情況下,父類引用就無法訪問子類中的方法了.
public class Test {
public static void main(String[] args) {
Father father = new Son(true);
System.out.println(father.isCanRun()); // false
father.walk(father.isCanRun()); // 兒子也只能走!
}
}這里很神奇,明明我的Son對象創建的時候傳入的參數是true,為什么執行結果卻是兒子也只能走!呢?
這里先進行一下這個知識點的小結,上面的問題會在下一個文章中講解.
感謝各位的閱讀!關于“Java中方法重載和方法重寫的區別有哪些”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。