抽象類
abstract修飾符
1.abstract修飾的類為抽象類,此類不能有對象,(無法對此類進行實例化,說白了就是不能new);
2.abstract修飾的方法為抽象方法,此方法不能有方法體(就是什么內容不能有);
關於抽象類的使用特點:
1.抽象類不能有對象,(不能用new此關鍵字來創建抽象類的對象);
2.有抽象方法的類一定是抽象類,但是抽象類中不一定有抽象方法;
3.抽象類中的抽象方法必須在子類中被重寫。
子類實現方法必須含有相同的或者更低的訪問級別(public->protected->private)。抽象類的子類為父類中所有抽象方法的具體實現,否則也是抽象類。
為什么要有抽象類?
有些東西不一定是一個人寫的,所以有些放法在當時有可能寫不出來,所以就寫個大概。
抽象方法不能有方法體,在方法后面加一個大括號而里面什么都不寫也是不行的,編譯器會報“abstract methods do not specify a body”
當一個類繼承抽象類的時候,這個類必須去重寫所繼承的抽象類的抽象方法,否則編譯器會報“The type Cat must implement the inherited abstract method Animal.eat()”的錯誤。
接口
1.接口中的所有屬性默認為:public static final ****;
2.接口中的所有方法默認為:public abstract ****;
3.接口不再像類一樣用關鍵字 extends去“繼承”,而是用 implements 去“實現”,也就是說類和接口的關系叫做實現,(例如:A類實現了B接口,那么成為A為B接口的實現類。而類與類之間的繼承的話,叫做A類繼承了B類,其中B類即為A類的父類)。實現接口與類的繼承比較相似
一個類可以實現多個接口,但只能繼承於一個類,所以可以通過這種方式來實現多繼承。
接口中的方法默認修飾符為“public abstract”
在接口中所有的屬性的修飾符都默認為"public static final",
接口和抽象類的區別
- 抽象類描述的是“是不是”的問題,而接口描述的是“有沒有”的問題;接口強調特定功能的實現,而抽象類強調所屬關系。
- 接口只有定義,不能有方法的實現,而抽象類可以有定義與實現,方法可在抽象類中實現。
- 實現接口的關鍵字為implements,繼承抽象類的關鍵字為extends。一個類可以實現多個接口,但一個類只能繼承一個抽象類。所以,使用接口可以間接地實現多重繼承。
- 接口成員變量默認為public static final,必須賦初值,不能被修改;其所有的成員方法都是public、abstract的。抽象類中成員變量默認default,可在子類中被重新定義,也可被重新賦值;抽象方法被abstract修飾,不能被private、static、synchronized和native等修飾,必須以分號結尾,不帶花括號。
- 接口被用於常用的功能,便於日后維護和添加刪除,而抽象類更傾向於充當公共類的角色,不適用於日后重新對立面的代碼修改。功能需要累積時用抽象類,不需要累積時用接口。
