Java繼承中的一些小問題
阿新 • • 發佈:2019-01-27
學習Java已經很久了,記錄一些繼承中模糊不清的問題。
一、方法重寫問題
重寫一個方法,只能改寫方法的方法體,所以不會形成方法的過載,而是會直接覆蓋掉從父類中繼承而來的方法(這個方法已經存在於子類中)。
二、型別轉換問題
- 當用父類建立子類物件的時候就已經用到了類的轉換,這時是將Cat類和Dog類的物件賦給父類Animal,這時是向上轉型,向上轉型會自動完成
- 由於an1、an2這樣的物件只能呼叫子類中重寫父類的方法,不能呼叫子類中特有的方法,所以要對這兩個物件進行轉換。這時的轉換是將父類的物件轉換成子類的,這時稱為向下轉型,需要強制轉換。
- instanceof關鍵字:用instanceof關鍵字可以判斷一個物件是否屬於某一個類或介面,語法如下:物件名 instanceof 類名(介面名)
三、private問題
繼承會複製父類除構造方法的所有成員,包括private修飾的成員。
以private修飾的屬性為例,方法也是一樣。
子類從父類中繼承了private修飾的一個屬性,這個屬性是存在於子類中的,但是如果在子類中編寫一個方法去訪問這個繼承而來的變數就會編譯出錯。
這段程式碼站在程式的角度來說是沒有問題的,這不過是編譯器不允許這樣做而已。
我們可以通過子類物件呼叫從父類繼承而來的方法(show方法)來訪問這個變數。show方法與這個變數均存在於子類中。
四、構造方法問題
- 首先構造方法不能被繼承。
- 在建立子類的物件的過程中必須呼叫父類的構造方法,在子類的構造方法中即使不寫也會預設存在一個super()。
- 呼叫父類的構造方法
※ 如果沒有顯示的呼叫基類的哪一個構造方法,則預設呼叫父類無參的構造方法(預設存super())。
※ 可以在子類構造方法的第一行用super關鍵字指明呼叫父類的哪一個構造方法。
※ 如果沒有用super指明呼叫哪一個構造方法父類又沒有無參的構造方法則編譯出錯。