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,為什麼執行結果卻是兒子也隻能走!呢?

這裡先進行一下這個知識點的小結,上面的問題會在下一個文章中講解.

小結

1.方法重載體現在同一個類當中同名方法參數列表不同的情況(必須滿足),返回值類型可以相同也可以不同.如果兩個方法方法名相同,參數列表相同但是返回值類型不同是不算重載的.

2.方法重寫體現在子父類當中,體現的不同類之間的聯系.要求子類重寫的方法有和父類相同的方法名,參數列表和返回值類型,但是方法內部的具體操作可以發生變化.方法重寫時要求子類方法的范文權限不能低於父類方法的訪問權限

到此這篇關於Java方法重載和方法重寫的區別到底在哪?的文章就介紹到這瞭,更多相關Java方法重載和方法重寫內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: