------------------------------------------------------------------------------------------------------------------
抽象類:(abstract)
繼承過後,子類變得越來越具體,父類則更一般,更通用。有時將父類設計得非常抽象,以至於它沒有具體的實例,這樣的類叫做抽象類
抽象類:(可以定義和普通類完全一樣的內容)
● 語法:權限修飾符 abstract class 類名稱{ }
● 不能被實例化,用來被繼承。子類必須重寫父類的抽象方法,才能被實例化
● 有構造器(所以的類都有構造器)
● 抽象類中不一定有抽象方法
抽象方法:(只有方法的聲明,沒有方法的實現。在定義抽象方法時沒有方法體和{ },結尾分號結束)
● 語法:權限修飾符 abstract void(或者返回值類型) 方法名(形參列表);
● 抽象方法所在的類一定是抽象類
● 子類如果繼承的是抽象的父類(有抽象方法),那麼子類必須重寫父類的所有抽象方法或者子類也是一個抽象類
● 若子類繼承抽象類,並重寫所有的抽象方法,則此類是一個「實體類」,即可以實例化
注意:不能用abstract修飾屬性、私有方法、構造器、靜態方法、final的方法
------------------------------------------------------------------------------------------------------------------
接口:(interface:抽象方法和常量值定義的集合)
接口是一種特殊的抽象類,只包含常量和方法的定義,沒有具體的實現。主要用途就是被實現類實現(面向接口編程)
● 接口類語法:權限修飾符 interface 接口名稱{ }
● 常量(成員變量)語法:public static final 數據類型 常量名 = 值(其中public static final可以省略,爲默認)
● 抽象方法語法:public abstract void(或者返回值類型)方法名(形參列表)(其中public abstract可以省略,爲默認)
● 實現接口語法:權限修飾符 class 類名稱 implements 接口名稱{ }(實現多個接口,接口名稱之間使用「,」分隔)
● 實現類可以繼承父類也可以實現接口語法:權限修飾符 class 實現類 extends 父類 implements 接口名稱{ }
● 對象的引用語法:接口名稱 變量名 = new 實現類的名稱(接口與實現類之間也存在多態性)
注意:接口沒有構造器。它是多繼承機制(多個接口使用「,」分隔,類是單繼承)。如果沒有完全重寫接口中的抽象方法,那麼這個類一定是抽象類。反之,全部重寫,那麼它就是一個實體類,可以實例化。在接口中的常量必須初始化值
------------------------------------------------------------------------------------------------------------------
接口總結:
● 可以實現不相關類的相同行爲,而不需要考慮這些類之間的層次關係
● 可以指明多個類需要實現的方法,一般用於定義對象的擴張功能
● 主要用來定義規範。解除耦合關係
------------------------------------------------------------------------------------------------------------------
接口和抽象類之間的關係:
注意:在開發中,一個類不要去繼承一個已經實現好的類,要麼繼承抽象類,要麼實現接口
------------------------------------------------------------------------------------------------------------------