關於Java的抽象類和接口的區別

        關於Java中抽象類和接口的區別,這可真是一個老生常談的問題了,幾乎所有的Java面試都會問到,而且還往往是前3題。由此可知,不可謂不重要。

        抽象類是一種特殊的類,它在class前面有abstract關鍵字來修飾。抽象類有點兒類似於“模板”的作用,其目的是根據它的格式來創建和修改新的類。但是並不能直接由抽象類創建對象,只能通過抽象類派生出新的子類,再由其子類來創建對象。抽象類是不能用new運算符來創建實例對象的類,它可以作爲父類被它的所有子類所共享。

        抽象類中有可能有一種特殊的方法——抽象方法,用關鍵字abstract來修飾。對抽象方法來說,只能聲明,不能實現。即只能用“;”結尾,而不能是用“{}”。在抽象類中定義的抽象方法必須在子類派生時被覆蓋。abstract不能和private、static、final或者native並列修飾同一個方法。

        有抽象方法的類一定是抽象類,但是抽象類不一定含有抽象方法。

        抽象類中可以有構造方法,但是不可以是抽象的。其實在抽象類裏面定義構造方法是多餘的,因爲不能用new來創建對象。

        抽象類與其子類之前是繼承關係,仍然是“is a”的關係。比如說,抽象類爲動物,abstract class Animal{ }

        狗繼承了動物這個抽象類,class Dog extends Animal{ }

        接口是一種特殊的抽象類,使用關鍵字interface來修飾。

        接口中的數據成員都是靜態的且必須初始化。若省略成員變量的修飾符,則系統默認爲public static final的。

        接口中的方法必須全部是abstract的,不能有一般的方法。若省略方法的修飾符,則系統默認爲是public abstract的。

        接口與抽象類一樣不能用new運算符來創建對象。

        利用接口來創建新類的過程稱爲接口的實現,使用關鍵字implements。

        接口可以多實現,即子類可以繼承多個接口,多個接口之間用逗號隔開。Java是單繼承,多實現。class A implements B,C{ }

        接口與其子類是實現的關係,是“has a”的關係。比如說狗有尾巴,interface Tail{}

                                                                                                        狗有爪子,interface Claw{ }

                                                                                                                            class Dog implements Tail,Claw{ }

        綜上所述,對於狗這個類來說,繼承了動物的抽象類,實現了有尾巴,有爪子這兩個接口。

        class Dog extends Animal implements Tail,Claw{ }

        

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章