JAVA知识基础(六):抽象
1.概述
抽象類、抽象方法以及接口,這三個知識點是每個程序員必備的基礎,無論是在實際編程的時候,還是在面試的時候,都會出現這類問題,面試官很可能就會問你,interface和abstract的區別
當父類知道子類應該包含什么樣的方法,但無法確定子類如何實現這些方法;在分析事物時,會發現事物的共性,將共性抽取出,實現的時候,就會有這樣的情況:方法功能聲明相同,但方法功能主體不同,這時,將方法聲明抽取出,那么,此方法就是一個抽象方法。
2.抽象類小結
3.抽象類組成分析
普通類可以包含構造方法、普通方法、static方法、常量和變量等內容。而抽象類也是類,而且是一個特別的類,抽象類是指在普通類的結構里面選擇性的增加抽象方法并以abstract關鍵字將該類修飾,是的,每個抽象類不管有沒有抽象方法在其類結構中,abstract關鍵字非加不可。
1、抽象類必須使用abstract修飾符來修飾,抽象方法也必須使用abstract修飾符來修飾,抽象方法不能有方法體。
2、抽象類不能被實例化,無法使用new關鍵字來調用抽象類的構造器創建抽象類的實例。
3、抽象類可以包含成員變量、方法(普通方法和抽象方法都可以)、構造器、初始化塊、內部類(接 口、枚舉)5種成分。
4、抽象類的構造器不能用于創建實例,主要是用于被其子類調用。
5、抽象類中不一定包含抽象方法,但是有抽象方法的類必定是抽象類
6、abstract static不能同時修飾一個方法 (abstract方法沒有方法體不能直接調用,static方法可以直接調用,沖突)
4.不能共存的關鍵字
不能與抽象類(abstract)共存的關鍵字主要有三個,分別是final、private、static
1、final
final:抽象類不能用final修飾。因為抽象類一定要被abstract修飾,而且抽象類一定要被繼承否則該抽象類無意義。而被final修飾的類不能被繼承,也就是說不能有子類,所以二者沖突不能同時使用!
2、private
private: 抽象類不能用private修飾,只能用public或protected。首先要明確一點:被abstract修飾的類是為了讓非抽象子類看到并強制重寫。如果抽象類中有私有的抽象方法,那么該抽象方法不被子類所知,就無法被復寫。 而抽象方法出現的就是需要被復寫。
3、static
static:如果static可以修飾抽象方法,那么連對象都省了,直接類名調用就可以了。眾所周知,抽象方法是沒有方法體的,可見運行也就沒意義了。雖然外部抽象類不能用Static修飾,但內部的抽象類卻可以使用static聲明
運行結果: saoMethod方法執行了
說白了抽象類的功能就是一個類定義模板的功能。
5.關于接口(interface)
接口(interface)可以說成是抽象類的一種特例,接口中的所有方法都必須是抽象的。
接口中的方法定義默認為public abstract類型,接口中的成員變量類型默認為public static final。
6.抽象類與接口的區別
下面比較一下兩者的語法區別:
1.抽象類可以有構造方法,接口中不能有構造方法。
2.抽象類中可以有普通成員變量,接口中沒有普通成員變量
3.抽象類中可以包含非抽象的普通方法,接口中的可以有非抽象方法,比如deaflut方法
4.抽象類中的抽象方法的訪問類型可以是public,protected和(默認類型,雖然 eclipse下不報錯,但應該也不行),但接口中的抽象方法只能是public類型的,并且默認即為public abstract類型。
5.抽象類中可以包含靜態方法,接口中不能包含靜態方法
6.抽象類和接口中都可以包含靜態成員變量,抽象類中的靜態成員變量的訪問類型可以任意,但接口中定義的變量只能是public static final類型,并且默認即為public static final類型。
7.一個類可以實現多個接口,但只能繼承一個抽象類。
注意
有抽象方法不一定是抽象類,也可能是接口。抽象類不一定有抽象方法,可以有非抽象的普通方法。
總結
以上是生活随笔為你收集整理的JAVA知识基础(六):抽象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySql日期处理系列-常用的日期推算处
- 下一篇: Docker原理剖析