Java 抽象類的理解


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可以得知,是這樣的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM