javaSE學習筆記6 重寫

java中的子類是不能獲得父類的構造器的

java中子類重寫(也叫覆蓋Overrider)父類的方法:子類繼承了父類,但是父類的方法不太適合子類,所以子類可以重寫父類的方法。重寫遵循“兩同兩小一大”規則:兩同就是方法名、形參列表相同,兩小就是子類的返回值必須比父類的相等或者比父類的小。子類方法聲明拋出的異常應該比父類的更小或者相等。一大是指子類方法的訪問權限應該比父類的方法的訪問權限更大。

重寫還有很重要的一點:父類的方法若是static型的,子類的也必須是static型的。子類重寫了父類的方法以後,若在子類中想要調用父類中的方法,可以採用super(被覆蓋的是實例方法,即沒有加static的方法),或採用類名.方法名(被覆蓋的方法是類方法,加static的方法)來調用父類中被覆蓋的方法。

super是直接父類對象的默認引用。

public class Base
{
	public static void text()
	{}
}

public class Derived extends Base{
	//這樣重寫是錯誤的,父類的方法是static型的,
	//子類的也必須一樣
	public void text()
	{}
}

重寫:若父類中的方法是private型的,那麼它對子類是不可見的,也就是不能被重寫。子類中定義了跟父類中方法名、參數列表一樣的函數那屬於定義一個新函數。

當java中創建一個類的對象時,系統會隱式創建該類的父類對象。只要有一個子類的對象存在,則一定存在一個與之對應的父類的對象。所以在子類中使用super引用時,super總是指向調用該方法的子類對象所對應的父類對象。

this和super都不能出現在static方法中原因:static修飾的方法是屬於類的,該方法的調用只可能是一個類,而不是對象,那麼這樣就不存在對應的父類對象或當前對象了,所以使用super或this引用也就失去意義。

如果子類中沒有覆蓋父類中的屬性,而在子類中要調用父類中的屬性,則可以省略super關鍵字。系統會按照以下順序查詢:

1、查看當前方法中是否有定義這個屬性。

2、查看當前子類中是否有定義這個屬性。

3、查看這個類的父類中是否有這個屬性,依次上溯,直到找到Object類,若Object中沒有,那麼就會報錯。

java中的子類不會獲得父類的構造器。使用super調用父類的構造器必須出現在第一行。當調用子類構造器來初始化子類對象時,父類構造器總會在子類構造器之前執行。執行父類構造器時,其父類的父類也會先構造,也就是說,創建任何java對象,java.lang.Object的構造器總是最先被執行的。




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