《THING IN JAVA》 9章介面 讀書筆記

2021-07-25 18:19:30 字數 2637 閱讀 6489

(1)包含抽象方法的類叫做抽象類,如果乙個類包含乙個或多個抽象方法,該類必須被限定為抽象的。(否則,編譯器會報錯)

(2)宣告為抽象類的類無法例項化。(否則,編譯器會報錯),當然乙個宣告為抽象的類也可以不包含任何抽象方法,如果你想乙個類不會被例項化,宣告為抽象得非常實用

(3)如果乙個類繼承乙個抽象類,那麼就必須為所有方法提供實現定義,否則該類也會定義為抽象的,介面也是一樣的,如果乙個類實現介面而不提共全部實現方法則必須宣告為抽象類。

(4)抽象類中的抽象方法不可以宣告為private的,否則就沒有可能提供實現的方法體。(否則,編譯器會報錯)

(1)inte***ce這個關鍵字產生乙個完成抽象的類

(2)在介面中,所有變數都會只能(預設)為 public static final 來修飾,所有的方法都會只能(預設)public abstrace 來修飾,內部類,介面只能(預設)為public 修飾。(否則,編譯器會報錯)

(3)在介面中定義的域不能是「空final」,但是可以被非常量表示式初始化(域為static final 都不允許不被初始化。即」空final「。

下面證明介面中的變數是靜態的:

public inte***ce mytest1

public class mytest2 }

輸出:

88 (1)建立乙個能夠根據所傳遞的引數物件的不同而具有不同行為的方法,被稱為策略設計模式(在後面的工廠模式會顯示)

(2)建立乙個介面卡將**轉為你所擁有的介面,並產生你所需要的介面,被稱為介面卡設計模式

(3)將介面從具有實現中解耦使得介面可以用於多種不同的具體實現,因此**也就更具可復用性

(1)使用介面的兩個原因

1.1為了能夠向上轉型為多個基類

1.2防止程式設計師建立該類的物件

(2)介面是多繼承的,一般情況下,只可以將extends用於單一類,但是可以引用多個基類介面。就像所看到的,只需用逗號將藉口命一一分割開即可

(3)組合介面時,出現名字衝突的情況,如下面這種情況

public inte***ce mytest1

public class mytest3 }

public class mytest4 extends mytest3 implements mytest1

結果:編譯報錯,因為這樣方法的重寫與方法的過載並存,如上述例子,過載方法僅通過返回型別是分不開的。(遵循方法重寫與方法過載的原則)

在打算組合的不同介面中使用相同的方法名通常會造成**可讀性的混亂,請盡量避免這種情況。

(1)類和介面也可以用private,protected來修飾,但是一般存在於內部(內部類,內部介面)的,這些介面或類符合它們各自的規則, 如:

public inte***ce mytest7 }

內部介面a只能用public修飾

(2)下面是乙個內部介面的例項:

public class mytest5

private class b{}

public class c implements a;

}public a geta()

public void receivea(a a)}

public class mytest6 }

結果:1處會編譯錯誤,由於類c的方法f()是實現私有介面的,所以mytest6這個類沒有許可權使用這個f()方法,只有mytest5類才有許可權使用這個方法,所以2成功了呼叫了該反法,交給了有使用f()方法許可權的類mytest6

如果了解這種特性,就總能夠找到它的用武之地

生成遵循某個介面的物件的典型方式就是工廠方法設計模式(一介面,一工廠類),下面是乙個工廠的方法例項:

public class factories

public static void action(cyclefactory cf)

}inte***ce cycle

inte***ce cyclefactory

class unicycle implements cycle

}class unicyclefactory implements cyclefactory

}class bicycle implements cycle

}class bicyclefactory implements cyclefactory

}class tricycle implements cycle

}class tricyclefactory implements cyclefactory}

輸出結果: 1

2 3你將看到另外一種更加優雅的工廠實現方式,那就是使用匿名內部類

(1)確定介面是理想的選擇,幾乎在任何時刻,都可以替代為建立乙個介面和乙個工廠

(2)如果隨便新增這種抽象性。這實際上已經變成了一種草率的設計優化

(3)任何抽象性都應該是應真正的需求而產生的。當必須時,你應該重構介面而不是到處新增額外級別的間接性,只是因為你意識到由於以防萬一而新增了新介面,那麼就該好好反思

(4)恰當的原則應該是優先選擇類而不是介面,從類開始,如果介面的必需性變得非常明確,那麼就進行重構。(如果當比較多的類具備相同的行為,為增加**的重用性和規範**,增加**可讀性和維護成本,往往需要重構介面,或一開始就設計介面,不是為了以防萬一而設計,增加**複雜性和維護難度的)

(5)介面是一種重要的工具,但是它們容易被濫用

第9章 引用

為了列印出特殊字元,我們需要通過使用反斜槓來引用它們。下面是總結的特殊字元 字元含義 使用者的主目錄 命令替換 注釋變數引用 把任務放到後台執行 萬用字元萬用字元 在子shell中執行 引用後面的乙個字元 管道指定乙個字符集的萬用字元 建立乙個命令塊 命令分隔符 單引號引用字元 雙引號引用字元 標準...

第9章 模板

函式模板 類模板 一 函式模板 1.函式模板可以用來建立乙個通用功能的函式,以支援多種不同形參,進一步簡化過載函式的函式體設計。2.定義方法 template 模板參數列 3.函式定義 模板參數列的內容 型別引數 class 或typename 識別符號 常量引數 型別說明符 識別符號 模板引數 t...

第9章 排序

9.1 開場白 購物 根據信用選擇商品就是排序的過程 9.2 排序的基本概念與分類 排序的依據是關鍵字之間的大小關係。9.2.1 排序的穩定性 根據在排序過程中待排序的記錄是否全部被放置在記憶體中,排序分為內排序和外排序 內排序是在排序整個過程中,待排序的所有記錄全部放置在記憶體中。外排序是由於排序...