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