繼承中的知識點

2022-06-05 11:48:13 字數 2536 閱讀 1030

目錄訪問修飾符

super關鍵字(繼承關係):子類對父類物件的引用=>訪問編譯器

繼承關係中的初始化順序

object類

==(比較變數中儲存的值)

抽象類構造方法

方法名相同,引數不同,返回型別不受限制

引數不同和引數型別有關,和引數名稱無關

需要在同乙個類體裡面

和修飾符和返回型別無關

乙個子類只能有乙個父類

子類只能繼承父類所有的非私有成員

1、如果父類方法返回型別是基本資料型別,那麼子類的返回型別必須和父類的返回型別一致;

如果父類方法返回型別是引用的資料型別(定義的物件),那麼子類的方法可以不和父類一致,但返回型別可以是父類和 父類的子類(協變)

2、子類方法可以重寫父類的屬性

3、訪問修飾符:子類重寫方法修飾符的範圍必須大於等於父類方法修飾符的範圍(子類範圍只能比父類範圍更高)

呼叫乙個物件的方法x.getsum(int param);虛擬機會為x指向的物件的所有方法建立乙個方法表,然後編譯器從中找出所有getsum()的方法,再根據傳參型別最終找到對應的方法,找不到就報錯,這個過程叫過載解析

同上過載解析

被private,static,final修飾的方法或者構造器,編譯器直接就可以找到呼叫,該呼叫方式為靜態呼叫

調父類方法會把父類中所有方法列舉在「方法表」中

調子類方法會把父類和子類所有方法列舉

public:本類、可跨包、繼承關係

private:只能本類自己訪問

protected:當前類、同包類、垮包子類

預設:當前類、同包類,跨包類不允許

private《預設

子類的構造過程中必須呼叫父類的構造方法

父類的構造方法不允許繼承(不能被拿來直接用)=》不能被重寫,但也要有,因為它會影響子類的例項化過程

在子類中的構造器中,需要對父類進行初始化

子類的建構函式沒有對父類初始化的話,子類的構造方法會預設呼叫父類的無參構造,若父類沒有無參構造,子類的構造會報錯

例外:父類只有乙個有參構造,子類中用super指向了父類的有參,也不會報錯

子類建構函式預設找父類無參建構函式,找不到報錯,這時用super指定另乙個存在的建構函式,就不會報錯

可通過super呼叫其他有參的構造方法,和this呼叫其他構造方法相同,必須放在方法的第一行,兩個不能同時使用

構造方法的呼叫必須放在構造方法裡

​ 按照靜態**塊》**塊》構建方法的順序從子類出發找到頂級父類在下來

​ 父靜態**塊,子靜態**塊,父類**塊,父類的構造方法,子類**塊,子類的構造方法

object中的equals比較的是兩個引用在記憶體中的位址是否相同

public boolean equals(object obj)
string型別重寫了equals只來比較字串的內容是否相等

我們可以通過在類中重寫equals的方法來定義比較規則

//重寫了equals來比較兩個物件內的名字和性別是否相同 

@override

public boolean equals(object obj)

也可以限制傳入引數型別

@override

public boolean equals(people p1)

object中的tostring方法會返回物件的字串表示形式當直接輸出物件名時,會訪問object的tostring()方法,以型別資訊@位址資訊的形式列印

com.imooc.object.people@1b6d3586(類名+雜湊碼)
子類可以通過重寫tostring()方法來自定義列印的內容

@override

public string tostring()

//列印姓名:han,年齡:19,性別:男
引用型別:引用一次後不能修改,但內部的屬性可以被修改

標註在方法上,說明是對父類方法的重寫,標註後他會檢查父類是否有這樣乙個方法,沒有會報錯

從子類中抽象出來的方法不知道寫什麼具體的內容可以把方法定義成抽象方法

public abstract  void raisesalary();
定義方法為抽象方法時,父類也得定義成抽象類

沒有抽象方法的類也可以定義成抽象類

抽象類不允許例項化,但能指向(引用)乙個非抽象子類的位址

抽象類中也可以有普通方法和屬性

萬一你用構造方法建立後想修改呢

繼承知識點 例項

namespace 繼承 public person 空建構函式 public int age public string name public virtual void sayhello virtual表示子類可以修改sayhello的方法。虛方法 我的姓名是 age,name public o...

繼承知識點總結

一 繼承的定義 1.繼承是物件導向的主要特徵 此外還有封裝和多型 之一,它使得乙個類可以從現有類中派生,而不必重新定義乙個新類。2.繼承的實質就是用已有的資料型別建立新的資料型別,並保留己有資料型別的特點,以舊類為基礎建立新類,新類包含了舊類的資料成員和成員函式,並且可以在新類中新增新的資料成員和成...

繼承的知識點(1)

private 除了本身類內 其餘類不可呼叫 protected 本身與派生類可以呼叫 public 都可以呼叫 例程 include include include using namespace std class people void people setpeople string name...