1. 基本概念
用abstract修飾的類是抽象類。如果類中有方法是abstract類型的,那么此類肯定是abstract類型的,也就是說此類的修飾符肯定有abstract(也就是說,有抽象方法的類是抽象類)。抽象類是不完整的,只能作為基類,且不能夠實例化。
2. 與類進行比較
抽象類不能夠實例化,並且對抽象類直接使用new運算符會導致編譯錯誤。
允許抽象類中包含抽象方法或者變量。
抽象類不能是private的。
3. 和接口比較
不同點:
抽象類能夠有實現了的方法,接口不能有。
類可以實現無數個接口,但只能繼承一個抽象類(或者其他類),抽象類派生的類扔可以實現接口,從而得出接口是用來解決多重繼承的問題的。
抽象類當中可以存在非抽象的方法,可接口不能,且它里面的方法只是一個聲明必須用public來修飾沒有具體實現的方法。
抽象類中的成員變量可以被不同的修飾符來修飾,可接口中的成員變量默認的都是靜態常量(static final)。
抽象類是對象的抽象,然而接口是一種行為規范。
相似點:
都不能實例化。
都可以包含未實現的方法聲明。
派生類必須實現未實現的方法,其中抽象類是抽象方法,接口是所有成員。
Tip:
1. implements的聲明的方法里面不能使用private來修飾方法。
2. abstract class 在 Java 語言中表示的是一種繼承關系,一個類只能使用一次繼承關系。但是,一個類卻可以實現多個interface。
3. 實現抽象類和接口的類必須實現其中的所有方法。抽象類中可以有非抽象方法。接口中則不能有實現方法。
4. 接口中定義的變量默認是public static final 型,且必須給其初值,所以實現類中不能重新定義,也不能改變其值。
5. 接口中的方法默認都是 public,abstract 類型的
6. 接口可以繼承接口(使用extends語句);抽象類可以實現接口;抽象類可以繼承實體類。抽象類不需要實現接口的全部方法。
7. 很有意思的地方:抽象類繼承接口,然后實體類繼承抽象類,發現不需要實現最開始的接口定義的方法。於是乎,接口定義的方法,在實體類實現的時候成為了抽象方法的存在。不過根據Tip5可以得知,是這樣的。