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...