Java的類能夠分爲三類:函數
類:使用class定義,沒有抽象方法。url
抽象類:使用abstract class定義,能夠有也能夠沒有抽象方法。.net
接口:使用inerface定義,只能有抽象方法。code
在這三個類型之間存在以下關係:繼承
類能夠extends:類、抽象類(必須實現全部抽象方法),但只能extends一個,能夠implements多個接口(必須實現全部接口方法)。接口
抽象類能夠extends:類,抽象類(可所有、部分、或者徹底不實現父類抽象方法),能夠implements多個接口(可所有、部分、或者徹底不實現接口方法)。get
接口只能extends一個接口。編譯器
繼承之後子類能夠獲得什麼:io
子類擁有父類非private的屬性和方法。編譯
子類能夠添加本身的方法和屬性,即對父類進行擴展。
子類能夠從新定義父類的方法,即多態裏面的覆蓋,後面會詳述。
關於構造函數:
構造函數不能被繼承,子類能夠經過super()顯示調用父類的構造函數。
建立子類時,編譯器會自動調用父類的無參構造函數。
若是父類沒有定義無參構造函數,子類必須在構造函數的第一行代碼使用super()顯示調用。
類默認擁有無參構造函數,若是定義了其餘有參構造函數,則無參函數失效,因此父類沒有定義無參構造函數,不是指父類沒有寫無參構造函數。看下面的例子,父類爲Human,子類爲Programmer。