Java方法重載與方法重寫

1、方法重載(@overload)

java中,同一個類中出現了相同名字的方法,稱爲方法重載。

規則:兩同一不同(無其他要求,比如返回值、修飾符等均可相同或不同)

  • 同一個類中、方法名相同
  • 形參列表不同(形參個數不同、形參類型不同)

在java重載一文中有詳細介紹。

2、方法重寫(@override)

java中,子類中包含與父類同名的方法,稱爲方法重寫。

規則:兩同兩小一大

  • 方法名相同、形參列表相同
  • 子類方法的返回值類型需小於等於父類方法的返回值、子類聲明拋出的異常需小於等於父類聲明拋出的異常
  • 子類方法的訪問權限應大於等於父類方法的訪問權限
尤其注意:被重寫的方法要麼都是類方法、要麼都是實例方法,不能一個是類一個是實例
class Base{
	public static void info() {
		//類方法
	}
}
public class t extends Base {
//方法重寫錯誤,因爲在父類中info是類方法,但是子類中是實例方法
	public void info() {
	}
}

如果父類中的方法被private修飾,那麼此時子類無法訪問該方法,如果在子類中出現與父類相同名字的方法,這不是方法重寫,只是在子類中定義了一個新的方法。此時這兩個同名的方法可以一個是類方法,一個是實例方法。

class Base{
//類方法,並且不能被子類訪問
	private static void info() {
	}
}
public class t extends Base {
//不是方法重新,只是在子類中定義了一個新的方法
	public void info() {
	}
}

如何在子類中調用被子類重寫的父類方法? 使用Super限定

子類重寫了父類的方法,那麼子類的對象將無法訪問父類中被子類覆蓋的方法,但可以使用super(實例方法)、類名(類方法)來調用該父類方法。

class Base{
	int age;
	//父類的info方法
	public void info() {
		System.out.println("Hello world");
	}
}
class Sub extends Base{
	//方法重寫
	public void info() {
		System.out.println("Hello China");
	}
	//子類的新方法,在該方法中,想要調用父類的info方法,因此需要使用super限定,如果沒有super,則默認是調用子類的info方法,則輸出的是:Hello China
	public void fun() {
		super.info();
	}
}
public class t{
	public static void main(String[] args) {
		Sub s=new Sub();
		s.info();
		s.fun();
	}
}

輸出結果:Hello China
Hello world

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