抽象類和接口的區別


1、什么是抽象類

眾所周知,在Java面向對象的概念中,所有的對象的描述都是通過類來實現的,但是並不是所有類都是用來描述對象的,這比如說抽象類,在我的理解中,抽象類就類似一個模板,並沒有將一個對象描述的很清楚,因為它並沒有足夠的信息去描述一個具體的對象,這就是所謂的抽象類。抽象類其實和普通的類基本一樣,除了抽象類不能實例化之外,普通類有的功能它都有,成員變量、成員方法和構造方法的訪問方式和普通類一樣,抽象類作為一個模板,是繼承它的子類的父類,它提取了子類的通用的方法,供子類使用,很好的實現了代碼的復用。

2、為什么使用抽象類

其實一開始我也是不理解的,為什么要引入抽象類,就使用普通類難道不行嗎?答案是只使用普通類是可以的,子類去繼承一個普通類也是可以的,子類完全可以覆蓋父類的方法,似乎抽象類完全沒有必要。但是仔細想想,其實父類的有些方法,完全沒有必要詳細的去寫怎么實現這個方法的,因為子類實現這個方法可能各有不同,父類具體去寫這個方法就很沒必要了,這就體現出抽象類的重要性了。這樣別人看到你的代碼,或你看到別人的代碼,你就會注意抽象方法,而知道這個方法是在子類中實現的,所以,有個提示作用。

3、抽象類和接口的區別

一張圖就可以說清楚:

 

 4、什么時候使用抽象類和接口

  • 如果你擁有一些方法並且想讓它們中的一些有默認實現,那么使用抽象類吧。
  • 如果你想實現多重繼承,那么你必須使用接口。由於Java不支持多繼承,子類不能夠繼承多個類,但可以實現多個接口。因此你就可以使用接口來解決它。
  • 如果基本功能在不斷改變,那么就需要使用抽象類。如果不斷改變基本功能並且使用接口,那么就需要改變所有實現了該接口的類。
  • 假如有一個接口,五個實現類,現在的需求可能要往接口加一個方法,這樣就要改動五個實現類,但需求只需要改動其中兩個實現類,可以再定義一個抽象類去實現這個接口,在抽象類中新增這個方法,然后其他兩個實現類實現這個抽象類就好了,或者使用 Java 8 中的新特性,在接口中新增默認方法或者靜態方法。


免責聲明!

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



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