1.抽象類和接口的區別:
①抽象類 用abstract修飾,當類的方法不能實現而需要通過子類重寫完成時需要定義爲抽象類。抽象類不能創建實例,用abstract標記的方法是抽象方法,當父類中的方法不能夠實現時使用抽象方法,抽象方法的方法體爲空,並且是以;結束而不是{ }。如果有一個以上的方法標記爲抽象方法,那麼這個類也要標記爲抽象類。抽象方法需要通過子類繼承,從而對抽象方法進行重寫。只要子類繼承了抽象類,那麼就要對父類的抽象方法進行重寫否則出錯;子類也可以將自己標記爲抽象類,這樣就不用重寫父類的抽象方法。注意沒有抽象的屬性。
②接口interface,創建接口和創建類類似,實現接口用
public class類名implements+接口名,+接口名,接口中所有的方法都是public abstract,接口變量默認屬性是public,static,final如果沒有顯示說明則默認是上述屬性,如果定義其他的屬性則出錯。接口名習慣在名字前加I表示是接口,如IAnimal。類實現接口時,也要重寫接口中的抽象方法。另外接口能實現多繼承,但沒有多大意義。
2.static,final,abstract總結:
3.java是單繼承多接口,不能多繼承的原因是遇到父類間存在相同的屬性或方法名時會因爲不知道區分而出錯。
serializable接口又被稱爲marker,它沒有任何方法要被實現,它能夠實現類的序列化。從而使得(1)對象可以在網絡上傳輸(2)可以使對象寫到文件中。用法:
class Dog implements serializable{
}
4.內部類,考試和平時使用都很少,只要瞭解。內部類就是在一個類裏面定義的類。在外部引用內部類時需要給出完整的名字,內部類可以訪問包含他的類的靜態變量、實例變量。內部類能夠隱藏起來,不爲同一包中的其他類所見。使用內部類在編寫事件驅動程序時很方便。
匿名類: 已存在類A和類B,在類A的入口函數中有匿名函數:
New B(){
Public void say(){
System.out.println(“這創建了一個匿名類”);
}
} .say();
這段代碼創建了匿名類,可以理解成類B的一個子類;如果B是接口,那麼匿名類必須實現接口的抽象方法。
5.內部類的實例創建:假設InnerClass1 是 InnerClass的內部類
InnerClass.InnerClass1 b = new InnerClass().new InnerClass1();
或者當內部類被定義爲static時:
InnerClass.InnerClass1 b = new InnerClass.InnerClass1();
6.類與類的三種關係:
①依賴(“use-a”) association
如果一個類的方法操作了另外一個類的對象,那麼這個類就依賴於另一個類
例如:Order類依賴於Account類
②聚合(“has-a”)aggregation
一個類的對象包含了另一個類的對象
例如:Order類對象包含Item類的對象,Order類和Item類具有聚合關係
③繼承(“is-a”)composition
特殊和一般的關係
理解template模式(模板模式):
先定義一個抽象類,然後子類分別繼承這個抽象類並且重寫抽象方法。然後再定義一個類,通過創建對象時改變爲子類的對象即可實現對相應子類的操作。
7.簡單工廠(Simple Factory)
在簡單工廠模式中,工廠負責生產類的實例對象。
簡單工廠模式是類的創建模式,在很多時候,一個實例的獲取,並非只是new的方式那麼簡單,他要求能夠根據需要來動態的決定創建具體類的實例,試用工廠模式,可以將類的實例化責任轉移到獨立的工廠類中,有利於提供程序的可維護性。
Java語言中的DateFormat類就是一個簡單工廠的實現。
8.模板方法模式
模板方法模式是一種基於繼承的複用。
模板方法模式將實現頂層邏輯的抽象類中的部分方法以具體方法及構造子方法實現,然後將剩餘的邏輯聲明爲抽象方法,延遲到子類中實現。
模板方法模式中使用抽象角色給出頂級行爲的是吸納,而將作爲細節步驟的基本方法留給具體子類實現。
Java中的HttpServlet類就是典型的模板方法模式的應用。