首先我們需要明確面向?qū)ο笾械睦^承和實(shí)現(xiàn)這兩種關(guān)系,繼承(Extends)是子類與父類之間的1種聯(lián)系,子類可以繼承父類中的非私有方法,可以重寫父類的抽象方法。實(shí)現(xiàn)(Implements)是接口與實(shí)現(xiàn)類之間的1種關(guān)系,實(shí)現(xiàn)類必須實(shí)現(xiàn)接口中的所有方法,接口中的方法不可以聲明為私有方法。
接口與實(shí)現(xiàn)類之間還好理解,可能大家對(duì)抽象類與普通父類,抽象方法與普通方法不太理解,下面就分別對(duì)抽象類與抽象方法、普通類與普通方法進(jìn)行簡單的對(duì)照。
首先我們要想用繼承關(guān)系的話就要觸及到父類與子類,當(dāng)子類繼承父類時(shí),就觸及到了父類是普通類還是抽象類,父類方法是普通方法還是抽象方法。
抽象方法是被關(guān)鍵字abstract修飾的方法,父類的抽象方法必須被子類重寫。未被abstract修飾的方法就是普通方法,父類的普通方法除私有的以外都可以被子類繼承。
抽象類也是被abstract修飾的類,只有類中有抽象方法,這個(gè)類就必須被定義成抽象類,抽象類必須被繼承,抽象方法必須被重寫,非抽象方法可以不被重寫。抽象類中的抽象方法被重寫的進(jìn)程就是我們面向?qū)ο笾械亩鄳B(tài)實(shí)現(xiàn)。未被abstract修飾的類就是普通類,普通類可以被繼承也能夠不被繼承,普通類1旦被繼承就成為父類,父類的非私有方法就能夠被子類繼承。
通過以上的介紹我們就可以看出來,在抽象類中只有抽象方法才必須被子類重寫;而在接口中,實(shí)現(xiàn)類必須實(shí)現(xiàn)接口的所有方法。換句話說,當(dāng)抽象類中所有的方法都是抽象方法的時(shí)候,接口與抽象類之間就能夠相互替換。但是這樣說是有些片面的,在java里面只能實(shí)現(xiàn)多繼承,也就是說1個(gè)子類只能繼承于唯逐一個(gè)父類;而1個(gè)實(shí)現(xiàn)類可以實(shí)現(xiàn)多個(gè)接口,java里面正是使用接口來實(shí)現(xiàn)多繼承的。因此在有多繼承的情況下即便是抽象類中的方法全是抽象方法也不能替換接口的作用。
上一篇 OpenGL ES2.0 shader內(nèi)部return語句返回失敗和數(shù)據(jù)精度丟失,花屏問題
下一篇 [置頂] 持久化API(JPA)系列(七)實(shí)體關(guān)系映射(ORM)之單表映射@IdClass