最近讀了好幾個關於java中抽象類和抽象方法的總結:
1.抽象類:注意以下幾個知識點
一、當一個類被聲明爲抽象類時,要在這個類前面加上修飾符abstract;
二、抽象類就是不能使用new方法進行實例化的類,即沒有具體實例對象的類;
三、抽象類有點類似“模板”的作用,目的是根據其格式來創建和修改新的類,但是對象不能由 抽象類直接創建,只可以通過抽象類派生出新的子類,再由其子類來創建對象;
四、在抽象類中的成員方法可以包括一般方法和抽象方法。
2.抽象方法:注意以下幾個知識點
一、抽象方法就是以abstract修飾的方法,這種方法只聲明返回的數據類型、方法名稱和所需的參數,沒 有方法體,也就是說抽象方法只需要聲明而不需要實現;
二、當一個方法爲抽象方法時,意味着這個方法必須被子類的方法所重寫,否則其子類的該方法仍然是 abstract的,而這個子類也必須是抽象的,即聲明爲abstract;
另外還需注意:
一、抽象類中不一定包含抽象方法,但是包含抽象方法的類一定要被聲明爲抽象類。抽象類本身不具備實際的功能,只能用於派生其子類。抽象類中可以包含構造方法,
但是構造方法不能被聲明爲抽象。
二、 抽象類不能用final來修飾,即一個類不能既是最終類又是抽象類。
abstract不能與private、static、final、native並列修飾同一個方法。
當一個子類繼承某個抽象類時,它可以有兩個選擇:
- 部分實現或完全不實現父類的所有抽象方法,但此時子類必須聲明爲抽象類。
- 實現父類所有的抽象方法,此時之類不比聲明爲抽象類。
抽象類不能被實例化(be instantiated),但可以實例化非抽象子類。
PS:抽象類 和接口的區別 :
- 一個類可以實現任意多個接口,但最多隻能作爲一個抽象類的子類。
- 一個抽象類可以有若干個抽象方法(但到少要有一個),而接口的所有方法都是抽象的,無論是否將它的方法顯示地聲明爲抽象的。
- 一個抽象類可以聲明實例變量,其子類可以繼承這些實例變量。而一個接口不能聲明實例變量,不過接口可以聲明static final修飾域。
- 抽象類可以有構造方法,而接口不能。
- 抽象類的可見性修飾符可以是public、protected、private或無修飾符(表示包內可見);而接口的可見性修飾符只能是 public,或無修飾符(包內可見)。
- 抽象類的方法的可見性修飾符可是以protected、private,或無(表示包內可見);而一個接口的方法的可見性修飾符只能是 public。
- 抽象類是從object類派生而來,它繼承了object的clone()和equals()方法。