首先我們需要明確面向對象中的繼承和實現這兩種關系,繼承(Extends)是子類與父類之間的1種聯系,子類可以繼承父類中的非私有方法,可以重寫父類的抽象方法。實現(Implements)是接口與實現類之間的1種關系,實現類必須實現接口中的所有方法,接口中的方法不可以聲明為私有方法。
接口與實現類之間還好理解,可能大家對抽象類與普通父類,抽象方法與普通方法不太理解,下面就分別對抽象類與抽象方法、普通類與普通方法進行簡單的對照。
首先我們要想用繼承關系的話就要觸及到父類與子類,當子類繼承父類時,就觸及到了父類是普通類還是抽象類,父類方法是普通方法還是抽象方法。
抽象方法是被關鍵字abstract修飾的方法,父類的抽象方法必須被子類重寫。未被abstract修飾的方法就是普通方法,父類的普通方法除私有的以外都可以被子類繼承。
抽象類也是被abstract修飾的類,只有類中有抽象方法,這個類就必須被定義成抽象類,抽象類必須被繼承,抽象方法必須被重寫,非抽象方法可以不被重寫。抽象類中的抽象方法被重寫的進程就是我們面向對象中的多態實現。未被abstract修飾的類就是普通類,普通類可以被繼承也能夠不被繼承,普通類1旦被繼承就成為父類,父類的非私有方法就能夠被子類繼承。
通過以上的介紹我們就可以看出來,在抽象類中只有抽象方法才必須被子類重寫;而在接口中,實現類必須實現接口的所有方法。換句話說,當抽象類中所有的方法都是抽象方法的時候,接口與抽象類之間就能夠相互替換。但是這樣說是有些片面的,在java里面只能實現多繼承,也就是說1個子類只能繼承于唯逐一個父類;而1個實現類可以實現多個接口,java里面正是使用接口來實現多繼承的。因此在有多繼承的情況下即便是抽象類中的方法全是抽象方法也不能替換接口的作用。