面試題:請說說抽象類和接口的區別
抽象類,使用abstract關鍵字修飾的類為抽象類,一般來說,含有抽象方法的類就需要定義為抽象類,但是抽象類不一定都有抽象方法,比如,在GUI當中,對于事件處理提供了很多監聽器口里里面方法都是抽象的,每次進行事件處理時,都需要實現監聽器接口,哪怕只處理一個簡單的動作,也需要實現接口所有的方法,這樣很麻煩,而且顯得代碼很臃腫,Java提供了適配器,適配器就是自己實現了監聽器接口,但是所有的方法都是空實現,以后再用到監聽器時,我們可以繼承適配器,實現我們需要的方法就可以了,這樣就很方便。像這樣的適配器只是給調用者提供一個方便,一定不希望別人直接創建實例來使用,所以有必要將它定義為abstract抽象的。
接口,接口是一種特殊的抽象類,接口中所有的方法都是抽象的,通常來講,我們使用接口作為一種協議,起到各模塊之間的銜接作用。由于Java中只支持單繼承,不支持多繼承,但是可以實現多個接口,原因在于接口中所有的方法都抽象,子類繼承哪個都無所謂,我們讓一個類實現多個接口,就可以做到將一個子類對象當做多種父類類型來使用,所以我認為定義接口就是為了更好地實現多態,因為多態就是把子類當做父類來用.