抽象類
同接口一樣,用來約束子類,限制子類必須擁有某些方法,比普通類多了個抽象方法,用抽象方法該類必為抽象類
概念
沒有具體的對象,具體的方法的一個類
abstract關鍵字聲明為抽象類/方法
一個類中有抽象方法則該類必須為抽象類
抽象方法:沒有方法體,需要子類重寫使其具有方法體
抽象類不一定要有抽象方法,但抽象方法一定在抽象類中
創建對象
抽象類不是具體的,不能直接創建對象,而是通過多態形式創建對象
Fu f=Zi z(具體對象);
抽象類的繼承
子類繼承抽象父類,則子類必須重寫父類所有抽象方法或將該子類定義為抽象類
接口
接口本身為抽象類型
用來擴展類的某些方法(后期擴展某些功能),時其類直接實現該接口
用來約束子類行為特征(必須要有某些功能,比抽象類更為純粹,只含有抽象方法)
因為子類繼承抽象類型(接口),所以必須重寫抽象方法,所以該子類間接必須擁有某些方法
創建接口
創建文件時選擇interface類型或者class關鍵字改為interface
接口的實現
接口是抽象類的一種特殊,所以也要使用多態形式創建對象,使用類去實現對象的聲明
類‘’實現’‘接口
類 implements 接口 implements:實現
創建對象
接口以多態形式創建對象
一般用具體對象(實現類)對象去實現(方法最多)(在接口單實現的前提下)
成員變量
接口中的成員變量默認被public static final修飾,所以接口中只存在常量,且是靜態常量
構造方法
接口中沒有構造方法,(類繼承object父類實現對象構造)
成員方法
接口中成員方法只能是抽象方法,默認被public abstract修飾
接口中抽象方法類型
抽象方法
返回值 method_name();
默認抽象方法
default
在開發場景中,接口中方法的需求越來越多,如果增加接口中的方法則將改動所有實現類,代碼維護困難,如果子接口繼承,或者實現多個接口,則會導致龐大的接口數量,使項目結構是分復雜,因此java在接口中提出default默認修飾符,被該修飾符修飾的抽象方法擁有方法體,實現類可不重寫直接使用方法,也可以選擇性重寫該方法
[public] default 返回值 method_name(){.......
}默認被public修飾
靜態抽象方法
在實際開發中一個類會實現多個接口,如果這些接口都含有相同的方法,那該如何區分,因此,為了解決這個問題,java提出了靜態抽象方法,具有方法體,只能通過接口名調用靜態方法
[public]static void run(){..........
}默認被public修飾調用靜態方法
}
static void main(String[] args) {Interface_name.method();
}默認被public修飾
私有抽象方法(java9)
在接口的開發中,相同方法中必然存在相同的代碼塊,為了降低代碼耦合,因此需要將珙桐屬性提取出來,而共性是不提供外部使用的
private 返回值 method_name(){........
}
靜態私有抽象方法(java9)
滿足靜態方法的共性調用
private static 返回值 method_name(){.......
}
抽象方法無方法體,但是被默認,靜態,私有修飾時擁有方法體
接口與類的關系
實現關系,類在繼承一個類的同時可以實現多幾個接口
接口與接口的關系
繼承關系,一個接口可以單繼承,可以多繼承,還可以多層繼承
使用接口時一般用具體對象去實現(具體對象方法最多)
抽象類與接口的區別
抽象類:和普通類多了該抽象方法,有其他普通方法,變量,可以提供基礎屬性和方法
接口:只有靜態常量和抽象方法,只添加額外特殊方法,更純粹