無論你是新手Java 程序員,還是老手程序員,可能在實際開發中很少自己寫抽象類。
但是抽象類在某些時候的功能很強大,可以保證子類中百分百實現父類中的方法 —— 普通類的弊端,消除子類的冗餘代碼 —— 接口的弊端
一、抽象類
1、什麼是抽象類?
在面向對象的概念中,所有的對象都是通過類來描繪的,但是反過來,並不是所有的類都是用來描繪對象的,如果一個類中沒有包含足夠的信息來描繪一個具體的對象,這樣的類就是抽象類。
2、抽象類不能被實例化
抽象類不能被實例化 (初學者很容易犯的錯),如果被實例化,就會報錯,編譯無法通過。只有抽象類的非抽象子類可以創建對象。
3、繼承抽象類
輸出結果:
4、抽象方法
如果你想設計這樣一個類,該類包含一個特別的成員方法,該方法的具體實現由它的子類確定,那麼你可以在父類中聲明該方法為抽象方法。
抽象方法:
抽象方法只包含一個方法名,而沒有方法體。
抽象方法沒有定義,方法名後面直接跟一個分號,而不是花括號。
輸出結果:
5、抽象類特點
- 抽象類不能被實例化 (初學者很容易犯的錯),如果被實例化,就會報錯,編譯無法通過。只有抽象類的非抽象子類可以創建對象。
- 抽象類中不一定包含抽象方法,但是有抽象方法的類必定是抽象類。
- 抽象類中的抽象方法只是聲明,不包含方法體,就是不給出方法的具體實現也就是方法的具體功能。
- 構造方法,類方法(用 static 修飾的方法)不能聲明為抽象方法。
- 抽象類的子類必須給出抽象類中的抽象方法的具體實現,除非該子類也是抽象類。
二、接口(Interface)
1、什麼接口?
官方解釋:Java 接口是一系列方法的聲明,是一些方法特徵的集合,一個接口只有方法的特徵沒有方法的實現,因此這些方法可以在不同的地方被不同的類實現,而這些實現可以具有不同的行為(功能)。
接口是解決 Java 無法使用多繼承的一種手段,但是接口在實際中更多的作用是制定標準的。在 jdk1.8之前,接口裡全部是抽象方法和常量。
2、接口寫法
2、接口的特點
輸出結果:
3、接口的繼承
一個接口能繼承另一個接口,這和類之間的繼承比較相似。
4、接口的多繼承
在 Java 中,類的多繼承是不合法,但接口允許多繼承。
在接口的多繼承中 extends 關鍵字只需要使用一次,在其後跟著繼承接口。
public interface Football extends Sports,balls
5、接口的實現
..implements 接口名稱 [, 其他接口名稱,其他接口名稱..., ...] ...
JDK1.7 抽象類和接口的區別
JDK 1.8 接口新特性 (允許默認方法、靜態方法、靜態常量)
閱讀更多 Python大星 的文章