抽象類和接口是java語言中對于抽象定義的兩種機制,正是由于這兩種機制的存在,才賦予了java強大的面向對象能力。
抽象類和接口之間在對于抽象類定義的支持方面具有很大的相似性,甚至可以相互替換,因此很多初學者對使用哪個總是混淆。
所以本文將
①分別介紹抽象類和接口
②對兩者的區別進行剖析
一:抽象類
①概念:
抽象類和一般類沒有太大的區別,都是在描述事物,只不過抽象類在描述事物時,有些功能不具體。所以抽象類和一般類在定義上,都是需要定義屬性和行為的。只不過,比一般類多了一個抽象函數。而且比一般類少了一個創建對象的部分。
②特點:
1.抽象方法只能定義在抽象類中,抽象類和抽象方法必須被abstract修飾,但抽象類中可以不定義抽象方法。
2.抽象類不可以被實例化
3.只有通過子類繼承抽象類并覆蓋了抽象類中的所有抽象方法后,該子類才可以實例化。否則,該子類還是一個抽象類。
4.抽象類中有構造方法,是用于給子類對象初始化的。
5.抽象類關鍵字abstract不可以和final,PRivate,static共存。
③什么時候用:
在描述一個行為的時候,這個行為有N種動作,這時候就要用到抽象類了。
二:接口
①概念:
抽象類是描述一個事物本質的內容的,而接口則是對一個事物的擴展。
Java接口是一系列方法的聲明,是一些方法特征的集合,一個接口只有方法的特征沒有方法的實現,因此這些方法可以在不同的地方被不同的類實現,而這些實現可以具有不同的行為(功能)。
②特點:
1.是用關鍵字interface定義的
2.接口中的成員都有固定的修飾符
成員變量:public static final
成員函數:public abstract
eg:
interface Inter{ public static final int x = 3; public abstract void show();}
3.接口中的方法都是抽象方法,而且接口不可以被實例化,接口的子類必須實現了接口中所有的抽象方法后,該子類才可以實例化。否則,該子類還是一個抽象類。
4.一個類在繼承另一個類的同時,還可以實現多個接口,這就是多繼承改良后的結果。
三:抽象類和接口
①語法層面的區別:
共性:都是不斷向上抽取的結果
區別:
1:抽象類只能被繼承,而且只能單繼承。
接口需要被實現,而且可以多實現。
2:抽象類中可以定義非抽象方法,子類可以直接繼承使用。
接口中都是抽象方法,需要子類去實現。
3:抽象類使用的是 is a 關系。
接口使用的 like a 關系。
4:抽象類的成員修飾符可以自定義。
接口中的成員修飾符是固定的。全都是public的。
5.抽象類可以有構造方法。
接口中不能有構造方法。
②設計層面的區別:
對于這個問題你可以去美國問一下Java之父——詹姆斯·高斯林,相信會得到十分具有權威性,最專業的回答。
什么? 太遠了? 呃。。。。好吧,那么鄙人不才,談談自己的理解。希望你可以從中得到一些東西。嘻嘻
接口這個東西呢,更多的是用于系統設計上,可以理解為電腦主板上的接口,最初的主板上面什么接口都沒有,每一次配置升級的時候,都是重新再做一塊主板,麻煩死了,所以人們就聚到一起喝喝茶,想一個好的辦法解決這個問題,還真給想出來了,每一次一個硬件升級都需要重新做一個主板,那么你自己升級就去升啊,別煩我啊,這樣吧,咱們兩個定個規則,我是做主板的,我在主板上留個特定的接口,你是做CPU的,你CPU也做這么一個接口,你做好之后直接往上面一插不就完了。哎呀,大家都很高興,看來還是喝茶好啊。
從上面可以看出接口設計的特性:1.規則2.擴展3.降低耦合
好了,說完了接口設計的特性,來繼續回到我們的話題,抽象類和接口設計層面的區別。
抽象類呢,是對類進行抽象,是描述事物的本質。而接口呢,是事物功能,行為的抽象。一般我們寫抽象類,都是先知道子類,然后根據子類抽象出父類,它是自下到上的。而接口就不一樣了,什么子類,我根本不需要知道,我只需要定義一個規則,你愛實現實現,不實現算了。這個是自頂到下設計的。
好了。我知道的就這么多了,也沒舉列子,寫代碼,相信大家不會怪我的,哈哈
有什么需要解決的問題,可以在下面評論,大家一塊解決啊、
新聞熱點
疑難解答