繼承:
•一種類與類之間的關係
•使用已存在的類的定義作為基礎來建立新類
•新類的定義可以增加新的資料或新的功能,也可以用父類的功能,但不能選擇性的繼承父類
滿足 a is a b 的關係就可以形成繼承關係
繼承通過extends關鍵字來實現
單一繼承,只能有乙個父類(基類、超類)
子類在繼承自父類的時候,自動獲取其非私有成員
父類不可以訪問子類的特有成員
子類可以重寫父類的方法,即重寫方法,但有幾點要求:
方法重寫:
•返回值型別相同,或者是父類返回型別的子類,譬如:
在父類animal中有create()方法:
public animal create()
在子類dog中重寫 create()方法:
@override
public dog create()
•方法名相同
•引數列表相同(引數型別、順序、個數) 都要與父類的方法相同
•與引數名稱無關(本來就只作為代號而已)
•訪問修飾符可以有變化,但是子類訪問修飾符的範圍不許小於父類訪問修飾符的範圍
當子類重寫父類方法後,子類物件呼叫的是重寫後的方法,優先從自身的方法執行
與方法過載有區別,方法過載的要求有:
方法過載:
•同乙個類中
•方法名相同,引數列表不同(引數順序、個數、型別)
•方法返回值、訪問修飾符任意
•與引數名稱無關
在子類中,可以定義與父類重名的屬性,優先呼叫子類中的屬性,比如cat extends animal,在animal類中temp=15,在cat中temp=300,
則cat one = new cat();one.temp == 300;
關於修飾符:
共四種型別:
•共有的:public
•私有的:private
• 受保護的:protected
•預設private:只允許在本類中進行訪問
public:允許在任意範圍訪問
protected:允許在當前類、同包任意型別、跨包子類中訪問,跨包非子類不允許訪問
預設修飾符:允許在當前類、同包任意類訪問,跨包任意類不允許訪問
super關鍵字的使用:
可以根據super來實現對父類物件的引用,在animal的子類dog的重寫了eat()方法,如果想使用父類的eat()方法,就要通過
super.eat()來使用
父類的構造方法不允許被繼承、不允許被重寫,那麼有什麼用呢?
答:會影響子類物件的例項化過程
比如:在執行子類的帶參構造時,會預設呼叫父類的無參構造
繼承的初始化順序:
優先載入父誒靜態成員,再載入子類的靜態成員,
執行父類物件的構造,最後執行子類的物件構造
訪問修飾符並不影響載入順序,跟載入順序有關
在執行父類物件的構造時,一直會找到object類,然後從父類開始執行構造,一直到執行到子類的構造
在執行子類的帶參構造時,會預設呼叫父類的無參構造
// 帶參構造
public cat(string name, int month)
也可以通過super()來實現對父類其他構造方法,但是super()必須放在**第一行
// 帶參構造
public cat(string name, int month)
•子類的構造過程中必須呼叫其父類的構造方法
•如果子類的構造方法中沒有顯示標註,預設呼叫父類的無參構造方法
•如果子類的構造方法中沒有顯示標註,且父類沒有無參構造方法時,編譯出錯
•使用super()呼叫指定父類構造方法,必須放在**第一行
關於super:
this和super不可以在靜態方法中呼叫
this()會執行當前物件的無參構造,this()呼叫的構造還是放在第一行
this()和super()不能共存,畢竟都要放在第一行,會發生衝突
// 帶參構造
public cat(string name, int month)
關於this:當前類物件的引用
•訪問當前類的成員方法
•訪問當前類的成員屬性
•訪問當前類的構造方法
•不能在靜態方法中使用
關於super:父類物件的引用
•訪問父類的成員方法
•訪問父類的成員屬性
•訪問父類的構造方法
•不能在靜態方法中使用
物件導向 繼承(上)
繼承 可以減少 的重複 乙個新類可以從現有的類繼承特徵 屬性和方法 從現有的類產生新類的過程稱為派生。現有的用來派生新類的類稱為基類或父類,派生出來的類稱為 派生類可以作為基類繼續派生新的類,從而形成類的層次結構,繼承方式 public 公有繼承 private 私有繼承 預設 protected ...
Java物件導向 繼承
1,mvc框架思想 m model 存放具體物件的類,比如玩家,機械人,地鼠 v view 用於介面視窗顯示的類 c control 控制邏輯的類2,繼承 子類繼承父類,extends public class teacher extends human 子類可以有自己的屬性與方法,不能繼承父類的構...
java 物件導向 繼承
package j1210.cls 如果乙個程式需要輸入資料,則程式流程預先無法確定 從標準輸入讀取資料 經由程式引數 從檔案 網路等讀取資料 根據時間 語義 public class animal 沒有顯式指定父類,則父類是 public void setname string name publ...