java抽象與介面的區別
A. java介面與抽象類有什麼區別
一個是介面,一個是抽象類,介面這相當於你定義了一些規范,然後下面的用這個規范去開發
B. 「抽象類」和「介面」的區別是什麼
它們的區別主要有以下幾點:
1、 介面是抽象類的變體,介面比抽象類更加抽象,介面中所有的方法都是抽象的。
2、每個類只能繼承一個抽象類,但是可以實現多個介面。
3、抽象類中不一定都是抽象方法,抽象的而抽象類可以實現部分方法。但是介面中方法必須為public修飾的、抽象的不能實現具體的法。
4、介面中基本數據類型為static而抽象類不是的。
(2)java抽象與介面的區別擴展閱讀:
抽象類往往用來表徵對問題領域進行分析、設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體概念的抽象。
通常在編程語句中用 abstract 修飾的類是抽象類。在C++中,含有純虛擬函數的類稱為抽象類,它不能生成對象;在java中,含有抽象方法的類稱為抽象類,同樣不能生成對象。
抽象類是不完整的,它只能用作基類。在面向對象方法中,抽象類主要用來進行類型隱藏和充當全局變數的角色。
介面泛指實體把自己提供給外界的一種抽象化物(可以為另一實體),用以由內部操作分離出外部溝通方法,使其能被內部修改而不影響外界其他實體與其交互的方式。
人類與電腦等信息機器或人類與程序之間的介面稱為用戶界面。電腦等信息機器硬體組件間的介面叫硬體介面。電腦等信息機器軟體組件間的介面叫軟體介面。
在計算機中,介面是計算機系統中兩個獨立的部件進行信息交換的共享邊界。這種交換可以發生在計算機軟、硬體,外部設備或進行操作的人之間,也可以是它們的結合。
C. java中抽象類和介面的區別
抽象類是用來捕捉子類的通用特性的 。它不能被實例化,只能被用作子類的超類。抽象類是被用來創建繼承層級里子類的模板。
介面是抽象方法的集合。如果一個類實現了某個介面,那麼它就繼承了這個介面的抽象方法。這就像契約模式,如果實現了這個介面,那麼就必須確保使用這些方法。介面只是一種形式,介面自身不能做任何事情。
(3)java抽象與介面的區別擴展閱讀:
抽象類往往用來表徵對問題領域進行分析、設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體概念的抽象。
通常在編程語句中用 abstract 修飾的類是抽象類。在C++中,含有純虛擬函數的類稱為抽象類,它不能生成對象;在java中,含有抽象方法的類稱為抽象類,同樣不能生成對象。
抽象類是不完整的,它只能用作基類。在面向對象方法中,抽象類主要用來進行類型隱藏和充當全局變數的角色。
D. 抽象類和介面有什麼區別
答得稀爛。。。
網上再學習了一次,在這里記下看到各位大蝦的金言。
一、抽象類:
在面向對象領域,抽象類主要用來進行類型隱藏。那什麼是類型隱藏呢?我們可以構造出一個固定的一組行為的抽象描述,但是這組行為卻能夠有任意個可能的具體實現方式。這個抽象描述就是抽象類,而這一組任意個可能的具體實現則表現為所有可能的派生類。好比,動物是一個抽象類,人、猴子、老虎就是具體實現的派生類,我們就可以用動物類型來隱藏人、猴子和老虎的類型。( 參考doSome方法)二、介面:
三、抽象類和介面的區別:
首先,抽象類在Java語言中表示的是一種繼承關系,一個類只能使用一次繼承關系。但是,一個類卻可以實現多個介面。也許,這是Java語言的設計者在考慮Java對於多重繼承的支持方面的一種折中考慮吧。 其次,在抽象類的定義中,我們可以賦予方法的默認行為。但是在介面的定義中,方法卻不能擁有默認行為,為了繞過這個限制,必須使用委託,但是這會 增加一些復雜性,有時會造成很大的麻煩。 抽象類在Java語言中體現了一種繼承關系,要想使得繼承關系合理,父類和派生類之間必須存在」is a」關系,即父類和派生類在概念本質上應該是相同的。對於介面來說則不然,並不要求介面的實現者和介面定義在概念本質上是一致的,僅僅是實現了介面定義的契約而已。介面表示的是」like
a」關系。 使用抽象類來定義允許多個實現的類型,比使用介面有一個明顯的優勢:抽象類的演化比介面的演化要容易的多。在後續的發行版中,如果希望在抽象類中增加一個方法,只增加一個默認的合理的實現即可,抽象類的所有實現都自動提供了這個新的方法。對於介面,這是行不通的。雖然可以在骨架實現類中增加一方法的實現來解決部分問題,但這不能解決不從骨架實現類繼承的介面實現的問題。由此,設計公有的介面要非常謹慎,一旦一個介面被公開且被廣泛實現,對它進行修改將是不可能的。 所以,使用介面還是抽象類,取決於我們對問題的概念的本質理解和設計的意圖。
Java介面與抽象類的相同點:
1. 都不能被實例化。
2. 都能包含抽象方法。
抽象類與介面緊密相關。然介面又比抽象類更抽象,這主要體現在它們的差別上:1)類可以實現無限個介面,但僅能從一個抽象(或任何其他類型)類繼承,從抽象類派生的類仍可實現介面,從而得出介面是用來解決多重繼承問題的。2)抽象類當中可以存在非抽象的方法,可介面不能且它裡面的方法只是一個聲名必須用public來修飾沒有具體實現的方法。3)抽象類中的成員變數可以被不同的修飾符來修飾,可介面中的成員變數默認的都是靜態常量(static fainl)。4)這一點也是最重要的一點本質的一點抽象類是對象的抽象,然介面是一種行為規范。
例如每個介面可以代表一種最頂層的抽象,可以理解為代表一類東西,如果一個類實現了多個介面,那這個類就有了多種類型,即介面是定義混合類型的理想工具最後:有一種設計模式,就是,默認適配模式,意思就是說,首先定義一個介面,通過抽象類實現這個介面,並實現一些子類不需要一定實現的方法,然後,子類就可以選擇是繼承介面,實現所有方法,還是直接繼承這個抽象類實現具體需要的方法,
定義成抽象類是為了以後要其子類來繼承的,因為父類里有很多方法是無法定義具體的實現的,只能定義一個原型,讓子類來分別實現!所以要定義成抽象的!
簡單來說就是
抽象類是在介面和實體類之間的一個橋梁例如做一個介面叫做飛行FlyAnimalAction,裡面定義一個方法叫做flying,再定義一個方法叫做eat
做一個類叫做蚊子實現介面,蚊子要實現flying方法,實現自己的eat方法
做一個類叫做蒼蠅實現介面,蒼蠅也要實現flying方法,實現自己的eat方法
你發現所有會飛的動物都要實現這個介面,很麻煩,不如
做一個抽象類FlyAnimal,然後實現上面的介面
在裡面實現flying這個方法,因為大部分的飛行動作是一樣的,而eat方法則繼續寫成抽象方法,因為大部分的動物吃東西是不一樣的
下面你再寫蚊子類就簡單了,可以直接繼承這個抽象類,然後實現自己的吃方法就行了
而且蒼蠅類的製作也是一樣,這個時候抽象類的功能就顯示出來了,當然抽象類的功能遠遠不是這些,只是初期理解到這里就夠了。
E. java中的抽象類與介面有什麼異同
相同點:
(1)都不能被實例化
(2)介面的實現類或抽象類的子類都只有實現了介面或抽象類中的方法後才能實例化。
不同點:
(1)介面只有定義,不能有方法的實現,java 1.8中可以定義default方法體,而抽象類可以有定義與實現,方法可在抽象類中實現。
(2)實現介面的關鍵字為implements,繼承抽象類的關鍵字為extends。一個類可以實現多個介面,但一個類只能繼承一個抽象類。所以,使用介面可以間接地實現多重繼承。
(3)介面強調特定功能的實現,而抽象類強調所屬關系。
(4)介面成員變數默認為public static final,必須賦初值,不能被修改;其所有的成員方法都是public、abstract的。抽象類中成員變數默認default,可在子類中被重新定義,也可被重新賦值;抽象方法被abstract修飾,不能被private、static、synchronized和native等修飾,必須以分號結尾,不帶花括弧。
(5)介面被用於常用的功能,便於日後維護和添加刪除,而抽象類更傾向於充當公共類的角色,不適用於日後重新對立面的代碼修改。功能需要累積時用抽象類,不需要累積時用介面。
F. java介面和抽象類的區別舉例
區別點:
1)耐罩定義:抽象類是用abstract關鍵字修昌爛鬧飾,包含至少一個抽象方法的類;
介面是用interface修飾的抽象方法和全局常量的集合。
2)組成:抽象類由構造方法、抽象方法、普通方法、常量和變數組成;
介面由常量和抽象方法組成。
3)使用:子類繼承抽象類(extends);
子類實現介面(implements)
4)關系:抽象類可以實現多個介面;
介面不能繼承抽象類,但允許繼承多個介面。
5)常見設計模式:抽象類的常見設計模式是模板設計;
介面的常見設計模式是工廠設計和代理設計。
6)對象:抽象類和借口都是通過對象的多態性昌盛實例化對象。
7)局限:抽象類只能單繼承;
介面沒有單繼承的局限。
8)實際歷旁:抽象類被用作一個模板;
介面被作為一個標准或表示一種能力;
9)選擇:如果抽象類和借口都可以使用,則優先使用介面,避免單繼承的局限。
10)特殊:一個抽象類中可以包含多個介面,一個介面中可以包含多個抽象類。
G. Java中,介面和抽象類的區別是什麼
Java提供和支持創建抽象類和介面。它們的實現有共同點,不同點在於:
介面中所有的方法隱含的都是抽象的。而抽象類則可以同時包含抽象和非抽象的方法。
類可以實現很多個介面,但是只能繼承一個抽象類
類如果要實現一個介面,它必須要實現介面聲明的所有方法。但是,類可以不實現抽象類聲明的所有方法,當然,在這種情況下,類也必須得聲明成是抽象的。
抽象類可以在不提供介面方法實現的情況下實現介面。
Java介面中聲明的變數默認都是final的。抽象類可以包含非final的變數。
Java介面中的成員函數默認是public的。抽象類的成員函數可以是private,protected或者是public。
介面是絕對抽象的,不可以被實例化。抽象類也不可以被實例化,但是,如果它包含main方法的話是可以被調用的。