本文目錄一覽:
- 1、java中抽象類的存在的意義是什麼?
- 2、java編程抽象類技術如何實現?
- 3、Java中抽象類和抽象方法的區別
- 4、Java抽象類是什麼概念?
- 5、java抽象類
- 6、java中的抽象類與接口有什麼異同?
java中抽象類的存在的意義是什麼?
java中抽象類更利於代碼的維護和重用。
抽象類往往用來表徵對問題領域進行分析、設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體概念的抽象。具體分析如下:
1.因為抽象類不能實例化對象,所以必須要有子類來實現它之後才能使用。這樣就可以把一些具有相同屬性和方法的組件進行抽象,這樣更有利於代碼和程序的維護。
比如本科和研究生可以抽象成學生,他們有相同的屬性和方法。這樣當你對其中某個類進行修改時會受到父類的限制,這樣就會提醒開發人員有些東西不能進行隨意修改,這樣可以對比較重要的東西進行統一的限制,也算是一種保護,對維護會有很大的幫助。
2.當又有一個具有相似的組件產生時,只需要實現該抽象類就可以獲得該抽象類的那些屬性和方法。
比如學校又新產生了專科生這類學生,那麼專科生直接繼承學生,然後對自己特有的屬性和方法進行補充即可。這樣對於代碼的重用也是很好的體現。
所以,Java中抽象類對於代碼的維護和重用有很好的幫助,也是Java面向對象的一個重要體現。
java編程抽象類技術如何實現?
java編程一直以來都是互聯網上使用比較廣泛的一種編程語言,所以我們今天就一起來了解一下java編程中的抽象類是如何來實現的,希望通過對本文的閱讀,大家能夠對java編程技術有更深刻的認識,下面昆明電腦培訓就開始今天的主要內容吧。
AbstractMap抽象類實現了一些簡單且通用的方法,本身並不難。但在這個抽象類中有兩個方法非常值得關注,keySet和values方法源碼的實現可以說是教科書式的典範。
抽象類通常作為一種骨架實現,為各自子類實現公共的方法。上一篇我們講解了Map接口,此篇對AbstractMap抽象類進行剖析研究。
Java中Map類型的數據結構有相當多,AbstractMap作為它們的骨架實現實現了Map接口部分方法,也就是說為它的子類各種Map提供了公共的方法,沒有實現的方法各種Map可能有所不同。
抽象類不能通過new關鍵字直接創建抽象類的實例,但它可以有構造方法。AbstractMap提供了一個protected修飾的無參構造方法,意味着只有它的子類才能訪問(當然它本身就是一個抽象類,其他類也不能直接對其實例化),也就是說只有它的子類才能調用這個無參的構造方法。
在Map接口中其內部定義了一個Entry接口,這個接口是Map映射的內部實現用於維護一個key-value鍵值對,key-value存儲在這個Map.Entry中。AbstractMap對這個內部接口進行了實現,一共有兩個:一個是可變的SimpleEntry和一個是不可變的SimpleImmutableEntry。
publicstaticclassSimpleEntryimplementsEntry,java.io.Serializable
實現了Map.Entry接口,並且實現了Serializable(可被序列化)。
它的方法比較簡單都是取值存值的操作,對於key值的定義是一個final修飾意味着是一個不可變的引用。另外其setValue方法稍微特殊,存入value值返回的並不是存入的值,而是返回的以前的舊值。需要重點學習的是它重寫的equals和hashCode方法。
publicstaticclassSimpleImmutableEntryimplementsEntry,java.io.SerializableSimpleImmutableEntry
定義為不可變的Entry,其實是事實不可變,因為它不提供setValue方法,在多個線程同時訪問時自然不能通過setValue方法進行修改。它相比於SimpleEntry其key和value成員變量都被定義為了final類型。調用setValue方法將會拋出UnsupportedOperationException異常。
它的equals和hashCode方法和SimpleEntry一致。
接下來查看AbstractMap抽象類實現了哪些Map接口中的方法。
publicintsize()
Map中定義了一個entrySet方法,返回的是Map.Entry的Set集合,直接調用Set集合的size方法即是Map的大小。
publicbooleanisEmpty()
調用上面的size方法,等於0即為空。
publicbooleancontainsKey(Objectkey)
這個方法的實現較為簡單,通過調用entrySet方法獲取Set集合的迭代器遍歷Map.Entry,與參數key比較。Map可以存儲為null的key值,由於key=null在Map中存儲比較特殊(不能計算hashCode值),所以在這裡也做了判斷參數key是否為空。
Java中抽象類和抽象方法的區別
1.抽象方法:在類中沒有方法體的方法,就是抽象方法。
2.抽象類:含有抽象方法的類就叫抽象類。
3.抽象類中的抽象方法必須被實現!
4.如果一個子類沒有實現父類中的抽象方法,則子類也成為了一個抽象類!
5.抽象類中的普通方法,可以不必實現。
6.用abstract來修飾一個類時,這個類叫做抽象類;用abstract來修飾一個方法時,該方法叫做抽象方法。
7.抽象類不能被實例化。
8.抽象方法只需聲明,而不需實現某些功能含有抽象方法的類必須被聲明為抽象類,抽象類必須被繼承,抽象方法必須被重寫。
Java抽象類是什麼概念?
JAVA的抽象類其實和她的普通類在表示實現概念的東西沒多大區別,不要因她帶有抽象這個形容詞就覺得比她的普通類理解起來複雜.
個人的理解是
所謂的抽象類呢,就是帶有抽象方法的類.
所謂的抽象方法就像是一種寫代碼的規範.
抽象方法沒有方法體
抽象方法可以有參數列表
抽象方法用abstract修飾
抽象方法的訪問修飾分別為 public、protected、default(缺省 不用寫)
加深了解抽象類
/*理解JAVA抽象類
* 1.抽象類不能被實例化.
* 2.抽象類有構造器,且他的構造在他的子類被實例化時被調用的順序和普通類調用的順序是一樣的(先父後子).
* 3.抽象類內部的方法可以不是抽象方法,也就是說抽象類內部可以有具體的方法.
* 4.抽象類的抽象方法屬於一種不完整的方法,只含有聲明和定義,沒有方法主體.
* 5.如果抽象的某個子類是普通類(非abstract類型的類),那麼該子類必須Override抽象類中所有的抽象方法.
* 6.抽象類的子類也是抽象類的話,那麼該子類既可以Override父類中的方法,也可以不Override父類中的方法.
* 7.普通類中不能定義抽象方法.
* 8.static不能修飾抽象方法
* 備註:為了方便理解,所謂的普通是指如下形式定義的類
* public class X{} 或 class A XX{}
* */
java抽象類
抽象類是指不允許被實例化的類;抽象方法是沒有方法體的方法。
1、抽象類可以不包括抽象方法,它反正不會去實例化,裡面的方法是不是抽象的沒有本質影響。
2、但是含有抽象方法的類絕不能被實例化,否則執行這個方法的時候,怎麼辦?
3、如果子類是非抽象的,那麼它就必須實現父類中的抽象方法;否則,它繼承來的抽象方法仍然沒有方法體,也是個抽象方法,此時就與“含有抽象方法的類必須是抽象類”相矛盾了。
比如說,我在紙上畫一個餅(抽象類),餅有個“吃到嘴裡沾一嘴芝麻”的方法。我可以在餅上畫幾個點假裝是芝麻,這時候“沾芝麻方法”就是個抽象方法,因為它不會真的掉芝麻;我也可以在餅上蘸點兒真芝麻,這時候“沾芝麻方法”就是個有實現的方法。但是用哪個方法都可以,因為沒人會去真的吃畫的餅吧。
但我要真的去照着這個圖烤一個餅(非抽象子類),那這個子類的“吃到嘴裡沾一嘴芝麻”的方法就必須有具體的實現。否則烤出來,一吃,沒芝麻啊!食客非上消協投訴不可。
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)接口被用於常用的功能,便於日後維護和添加刪除,而抽象類更傾向於充當公共類的角色,不適用於日後重新對立面的代碼修改。功能需要累積時用抽象類,不需要累積時用接口。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/305057.html