IEnumeratorTItem和IEnumerator Java 抽象类和普通类、接口的区别——看完你就顿悟了...
?
| IEnumerable?其原型至少可以說有15年歷史,或者更長,它是通過?IEnumerator?來定義的,而后者中使用裝箱的?object?方式來定義,也就是弱類型的。弱類型不但會有性能問題,最主要地是不能在編譯時進行類型檢查,編程靠運氣,只有運行時在用戶面前崩潰了(而且是某個特定數據、幾十遍運行之后才崩潰了)才丟人地被發現。 所以最近10幾年都是強調強類型的編程方式,盡量不要弱類型,盡量不要畫蛇添足地去搞什么“動態”。真正好的動態程序,也是強類型的,解決了穩定性問題的。 而?.net?最初設計時,設計者不懂泛型。在?.net?正式發布了好幾年之后,才支持泛型。而且是在?JIT?層面支持的,編譯出來的代碼少、性能好(遠比?c++模板好很多)。 所以,一些過去非常重要的低級的接口,后來也都有使用泛型的重構實現。但是老的東西不能想當然地刪除,就保留下來了。所以你會看到有一個不用泛型的枚舉接口,還有一個使用泛型的。其核心目的是一樣的,區別只是后者重構了、去掉了用弱類型的?object?來聲明一些屬性和方法的方式。 二者實質是一樣的,不要分開來理解。 在你使用時,如果你會用,那么你可以只用泛型的,不要使用老的。 |
|
?
?
?
?
Java 抽象類和普通類、接口的區別——看完你就頓悟了
2017年10月25日 15:37:34 閱讀數:398Java 抽象類和普通類、接口的區別——看完你就頓悟了
標簽:?java抽象類概念理解抽象類與接口區別抽象類與普通類區別 2017-05-04 16:26?1029人閱讀?評論(0)?收藏?舉報 ?分類: Java(17)?版權聲明:本文為博主csdn_aiyang原創文章,未經博主允許不得轉載。
目錄(?)[+]
概念:
抽象性和具體性都是相對的,不是絕對的。簡單說,概念的內涵越小,則其抽象程度就越高,其外延也越大,反之亦然。比如“人”比“男人”抽象一點,而“生物”又比“人”更抽象一點,“物質”則比“生物”更抽象。 抽象的概念是由具體概念依其“共性”而產生的,把具體概念的諸多個性排出,集中描述其共性,就會產生一個抽象性的概念。抽象思維,是人類思維達到高級階段產生的一種能力,例如,當小孩子思維尚未成熟時,他們只能掌握具體概念,他們在學習代詞“你、我、他”時往往遇到困難,因為代詞具有較高的抽象性。 總之,抽象概念的外延大,內涵小,具體概念的外延小,內涵大。一、抽象類與普通類的區別:
1、普通類可以去實例化調用;抽象類不能被實例化,因為它是存在于一種概念而不非具體。
?2、普通類和抽象類都可以被繼承,但是抽象類被繼承后子類必須重寫繼承的方法,除非自類也是抽象類。
看一個實例:
[java]?view plain?copy輸出結果:
狗啃骨頭
貓爬樹
-----------------------
問題:把父類改成抽象類,方法改成抽象方法,那么
public?void?play();//抽象方法沒方法體
子類不變,依然重寫父類方法,那這個跟普通父類沒區別啊?
難道說就一個抽象方法沒方法體就完事了??那我普通方法有方法體,我空著不寫內容不就得了,不跟抽象方法一個樣嗎??
別跟我說抽象類還不能實例化,哥也不需要去new它!
普通類都能搞定的,還弄個抽象類有什么意義?我前面都說了普通類的方法我可以空著不寫,達到跟抽象類方法沒方法體一樣的效果。
既然兩種方式都能達到同一個輸出效果,弄一種方式不就得了,那為什么還要創造出一個抽象類出來?難道是比普通類看著舒服?用著爽?還是更加便捷?還是為了強制讓別人用的時候必須強制化實現抽象方法省的你忘了什么的?
?
答:就是為了強制不能實例化,以及強制子類必須實現方法這不是你忘不忘的問題
你說你不去new它就行了,這話沒錯
那你想另一個問題,為什么要有訪問控制呢?為什么要有private和public之分呢?
我可以全部public,不該訪問的,我不訪問就行了啊
小程序里,看不出什么區別,反而private成員要寫一堆set和get函數,多麻煩,我自己寫小程序的時候也會偷懶全部public
但是項目大了,代碼多了,這種嚴謹的結構就很重要了
且不說會有很多人合作一起寫一個程序,哪怕還是你一個人寫,也保不住有忘記的時候,那時候編譯器不報錯,茫茫碼海上哪找錯誤去
面向對象說到底就是方便你思考,模塊化,易維護管理,硬要說沒必要,整個面向對象都沒必要了,C語言有什么干不了的呀,運行效率還高。
二、抽象類與接口的區別:
1、概念不一樣。接口是對動作的抽象,抽象類是對本質的抽象。
抽象類表示的是,這個對象是什么。接口表示的是,這個對象能做什么。比如,男人,女人,這兩個類(如果是類的話……),他們的抽象類是人。說明,他們都是人。人可以吃東西,狗也可以吃東西,你可以把“吃東西”定義成一個接口,然后讓這些類去實現它。
所以,在高級語言上,一個類只能繼承一個類(抽象類)(正如人不可能同時是生物和非生物),但是可以實現多個接口(吃飯接口、走路接口)。
2、使用不一樣:
?a.抽象類 和 接口 都是用來抽象具體對象的. 但是接口的抽象級別最高
b.抽象類可以有具體的方法 和屬性, ?接口只能有抽象方法和不可變常量
c.抽象類主要用來抽象類別,接口主要用來抽象功能.
d.抽象類中,且不包含任何實現,派生類必須覆蓋它們。接口中所有方法都必須是未實現的。
?e.接口是設計的結果 ,抽象類是重構的結果
3、使用方向:當你關注一個事物的本質的時候,用抽象類;當你關注一個操作的時候,用接口。
注意:抽象類的功能要遠超過接口,但是,定義抽象類的代價高。因為高級語言來說(從實際設計上來說也是)每個類只能繼承一個類。在這個類中,你必須繼承或編寫出其所有子類的所有共性。雖然接口在功能上會弱化許多,但是它只是針對一個動作的描述。而且你可以在一個類中同時實現多個接口。在設計階段會降低難度的。
總結
以上是生活随笔為你收集整理的IEnumeratorTItem和IEnumerator Java 抽象类和普通类、接口的区别——看完你就顿悟了...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【SpringMVC】从Fastjson
- 下一篇: 英伟达第二季度营收增长24%