Java的類可以分為三類:
類:使用class定義,沒有抽象方法。
抽象類:使用abstract class定義,可以有也可以沒有抽象方法。
接口:使用inerface定義,只能有抽象方法。
在這三個類型之間存在如下關系:
類可以extends:類、抽象類(必須實現(xiàn)所有抽象方法),但只能extends一個,可以implements多個接口(必須實現(xiàn)所有接口方法)。
抽象類可以extends:類,抽象類(可全部、部分、或者完全不實現(xiàn)父類抽象方法),可以implements多個接口(可全部、部分、或者完全不實現(xiàn)接口方法)。
接口只能extends一個接口。
繼承以后子類可以得到什么:
子類擁有父類非private的屬性和方法。
子類可以添加自己的方法和屬性,即對父類進行擴展。
子類可以重新定義父類的方法,即多態(tài)里面的覆蓋,后面會詳述。
構(gòu)造函數(shù)不能被繼承,子類可以通過super()顯示調(diào)用父類的構(gòu)造函數(shù)。
創(chuàng)建子類時,編譯器會自動調(diào)用父類的無參構(gòu)造函數(shù)。
如果父類沒有定義無參構(gòu)造函數(shù),子類必須在構(gòu)造函數(shù)的第一行代碼使用super()顯示調(diào)用。
類默認擁有無參構(gòu)造函數(shù),如果定義了其他有參構(gòu)造函數(shù),則無參函數(shù)失效,所以父類沒有定義無參構(gòu)造函數(shù),不是指父類沒有寫無參構(gòu)造函數(shù)。看下面的例子,父類為Human,子類為Programmer。