Java的類可以分為三類:
類:使用class定義柿究,沒有抽象方法。
抽象類:使用abstract class定義黄选,可以有也可以沒有抽象方法蝇摸。
接口:使用inerface定義,只能有抽象方法办陷。
在這三個(gè)類型之間存在如下關(guān)系:
類可以extends:類貌夕、抽象類(必須實(shí)現(xiàn)所有抽象方法),但只能extends一個(gè)懂诗,可以implements多個(gè)接口(必須實(shí)現(xiàn)所有接口方法)蜂嗽。
抽象類可以extends:類苗膝,抽象類(可全部殃恒、部分植旧、或者完全不實(shí)現(xiàn)父類抽象方法),可以implements多個(gè)接口(可全部离唐、部分病附、或者完全不實(shí)現(xiàn)接口方法)。
接口只能extends一個(gè)接口亥鬓。
繼承以后子類可以得到什么:
子類擁有父類非private的屬性和方法完沪。
子類可以添加自己的方法和屬性,即對(duì)父類進(jìn)行擴(kuò)展嵌戈。
子類可以重新定義父類的方法覆积,即多態(tài)里面的覆蓋,后面會(huì)詳述熟呛。
關(guān)于構(gòu)造函數(shù):
構(gòu)造函數(shù)不能被繼承宽档,子類可以通過super()顯示調(diào)用父類的構(gòu)造函數(shù)。
創(chuàng)建子類時(shí)庵朝,編譯器會(huì)自動(dòng)調(diào)用父類的無參構(gòu)造函數(shù)吗冤。
如果父類沒有定義無參構(gòu)造函數(shù),子類必須在構(gòu)造函數(shù)的第一行代碼使用super()顯示調(diào)用九府。
類默認(rèn)擁有無參構(gòu)造函數(shù)椎瘟,如果定義了其他有參構(gòu)造函數(shù),則無參函數(shù)失效侄旬,所以父類沒有定義無參構(gòu)造函數(shù)肺蔚,不是指父類沒有寫無參構(gòu)造函數(shù)±芨幔看下面的例子婆排,父類為Human,子類為Programmer笔链。