HIT軟體構造學習筆記 第三章(下)

2021-10-07 19:52:24 字數 1897 閱讀 6154

3.4物件導向的程式設計

一.一些基本概念

1.靜態成員和例項成員

2.介面:

介面是用來確定adt規約的,所以介面中只能有供使用者使用的方法,不能存在建構函式

(1)介面之間可以繼承和擴充套件

(2)乙個類可以實現多個介面

(3)乙個介面可以有多個實現類

*另外要注意,介面的返回值也是虛擬的,不能存在具體實現,此處有考點:改介面的**

3.繼承和重寫:

(1)嚴格繼承:

所有的子類只能新增新的方法,不能對原有父類的方法進行重寫

(注意:final型別的不能被繼承和重寫)

(2)重寫:

就是對父類的方法進行改進,但是注意重寫不能改變方法的本意

在實際執行的時候,到底執行子類的方法還是父類的方法要看資料的型別,執行相同型別的那個方法

(3)子類和父類的方法分:

這裡直接舉乙個例子:那種多數子類中都需要用到的方法就直接放在父類中就好了

4.多型:

多型的分類:

(1)特殊多型(過載–overloading):

就是用乙個方法名實現不同的方法

要求:引數型別必須是不同的,其他的都隨意

*過載(overloading)和重寫(overriding)是不一樣的:

重寫必須保證:

a.修改後必須有比父類還強的實現

b.引數型別和返回值都不能改變

考點:判斷overloading和overriding是否合法

(注意:inte***ce型別不能被例項化)

(2)引數化多型(泛型):

在執行過程中,根據不同的實現,給類賦不同的值(用< >表示)

(3)子型別:

表示有層次的型別網路(也就是子類和父類的關係)

3.5adt和oop中的等價性

一.等價性

等價關係:自反性,傳遞性,對稱性

二.immutable型別的物件判斷等價性

1.從af的角度:

if f(a) = f(b) 則a和b等價(af對映到相同的結果)

2.用obsrevation判定(方法返回的結果)

在使用者的角度,對兩個物件呼叫任何相同的操作,都會得到相同的結果,則可認為兩個物件等價

考點:兩種方法可能會出現不同的判斷結果

3.== 和 equals()方法

(1)雙等號:

利用等價性,如果兩個引用指向同乙個物件才判定為相等

*非常嚴格的判定,基本只用於基本資料型別

(2)object類中為我們提供了equals()方法

我們可以通過重寫(overriding)equals()方法實現我們自主判定等價性

(3)判斷equals()方法是否合理的一些條件:

a.是否滿足等價關係

b.除非物件被修改,否則多次呼叫equals()方法應該為同樣的結果(不能一天乙個樣)

c.「相等」的物件,hashcode()的值必須一樣

d.不能和「空」判定相等

(4)hashcode()

注意:a.所有物件可以使用同一hash值,但是會影響效率

b.等價的物件必須有相同的hash值

c.重寫equals()方法的時候也要保證hashcode()的值必須一樣

三.mutable型別的物件判斷等價性

因為mutable的可變性,我們一般都用行為等價性判斷(也就是類似於雙等號)

反之,判斷immutable的時候我們偏向於觀察等價性(也就是重寫overriding)

*clone()方法:

x.clone() != x;

x.clone().getclass() == getclass();

x.clone().equals(x);

第三章學習筆記

執行執行緒,簡稱執行緒,是在程序中活動的物件。核心排程的物件是執行緒,而不是程序。程序描述符中包含的資料能完整地描述乙個正在執行的程式 各種狀態之間存在轉換的條件,若滿足則進行轉換,跟模擬電路中所學的狀態機是乙個道理。通過st task state task,state 函式來設定當前程序狀態 fo...

第三章筆記

第三章預習筆記 一 高階語言和機器指令中的運算 1,按位運算 符號 按位or運算 符號 按位and運算 符號 表示按位not運算 符號 按位xor運算。實現掩碼操作 通過與給定的乙個位模式進行按位與,可以提取所需要的位,對這些位進行 置1 清0 等。2,符號 按位or運算 符號 表示and運算 符號...

軟體構造 第三章知識整理(上)

基本資料型別 物件資料型別 靜態型別檢查 動態型別檢查 mutable immutable 例 基本資料型別 mutable 可變資料型別 擁有方法可以修改自己的值 引用 final類無法派生子類 final變數無法改變值 引用 final方法無法被子類重寫 值的改變 引用的改變 用string和s...