Java中方法的覆寫


所謂方法的覆寫override就是子類定義了與父類中同名的方法,但是在方法覆寫時必須考慮權限,即被子類覆寫的方法不能擁有比父類方法更加嚴格的訪問權限。

修飾符分別為public、protected、default、private。他們的訪問權限如下圖所示。

用public修飾的類在本類、同包、子類、其他包中互相訪問都是可以的。

用protected修飾的類在本類、同包、子類中互相訪問都是可以的,protected不可以在包外沒有繼承關系的類中互相訪問。

就說明用default修飾的類在本類、同包中互相訪問都是可以的,default不可以在包外不管有沒有繼承關系的類都不可以互相訪問。

用private修飾的類只能在本類中訪問。

它們的訪問權限大小是 public > protected > default > private;

如果在父類中的使用public定義的方法,則在子類中的訪問權限必須是public,否則程序無法通過編譯。

class Person{
	void print(){
		System.out.println("Person --> void print(){}");
	}
}

class Student extends Person{
	public void print(){                                    
		System.out.println("Student --> void print(){}");  //覆蓋父類中的方法,擴大了權限
	}
}

public class OverrideDemo01 {
	public static void main(String[] args){
		new Student().print();
	}
}

  

 

父類中定義的private方法,在子類中定義成default方法,這種不是方法的覆寫。

class Person{
	private void print() {
		System.out.println("Person --> void print(){}" );
	}
	public void fun() {
		this.print();
	}
}

class Student extends Person{
	void print(){
		System.out.println("Student --> void print(){}");
	}
}

public class OverrideDemo04 {
	public static void main(String[] args) {
		new Student().fun();
	}
}
輸出結果:Person --> void print(){}可見調用的方法是父類的方法,也就是說此時子類並沒有覆寫父類中的方法,而是子類中重新定義了一個新的方法。


父類子類中如果聲明了相同的屬性時,則在子類中直接訪問時一定采用“就近訪問原則”, 即先找到本類中的屬性,如果此時要調用父類中的屬性,直接使用“super.屬性”格式即可。

覆寫與重載的區別

 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM