接口和抽象類的區(qū)別:
- 抽象類只能單繼承初茶,接口能多實現(xiàn)(一個類只能繼承一個抽象類暴凑,但是能實現(xiàn)多個接口)
- 抽象類是一個類,可以被任意權(quán)限修飾符修飾,靜態(tài)和非靜態(tài)屬性蓄愁,final和非final屬性峡扩,可以有抽象方法和非抽象方法昼激;
接口只能被public,final修飾,只能有靜態(tài)方法,即使沒有顯示的聲明限煞,而且是不可修改的抹恳; - 抽象類可以有任意類型的屬性,接口只能有靜態(tài)常量修飾的屬性署驻。
- 抽象類可以有普通方法和抽象法方法奋献,接口的方法都是抽象方法健霹。
- 抽象類和接口都不能實例化,但是抽象類有構(gòu)造方法瓶蚂,接口沒有構(gòu)造方法糖埋。
- 抽象的事物不同: 抽象類是對類的抽象,接口是對行為的抽象;
抽象類是對整個類抽象,包括屬性,行為窃这;
接口是對類的行為(局部)進(jìn)行抽象 - 定義的時候,定義抽象類和接口的思想不同瞳别; 設(shè)計抽象類是自下而上的過程,我子類需要,所以我定義抽象類;設(shè)計接口是自上而下的過程,我接口規(guī)范某一行為,我某類需要這個行為,我實現(xiàn)某接口杭攻;核心區(qū)別:調(diào)用者使用動機不同,實現(xiàn)接口是為了使用他規(guī)范的某一個行為祟敛; 繼承抽象類是為了使用這個類屬性和行為.
總結(jié):(接口為了規(guī)范,抽象為了復(fù)用)抽象類是從子類中發(fā)現(xiàn)公共部分朴上,然后泛化成抽象類垒棋,子類繼承該父類即可,但是接口不同痪宰。實現(xiàn)它的子類可以不存在任何關(guān)系叼架,共同之處。例如貓衣撬、狗可以抽象成一個動物類抽象類乖订,具備叫的方法。鳥具练、飛機可以實現(xiàn)飛Fly接口乍构,具備飛的行為,這里我們總不能將鳥扛点、飛機共用一個父類吧哥遮!所以說抽象類所體現(xiàn)的是一種繼承關(guān)系,要想使得繼承關(guān)系合理陵究,父類和派生類之間必須存在關(guān)系眠饮,即父類和派生類在概念本質(zhì)上應(yīng)該是相同的。對于接口則不然铜邮,并不要求接口的實現(xiàn)者和接口定義在概念本質(zhì)上是一致的仪召, 僅僅是實現(xiàn)了接口定義的規(guī)則而已。
set和List的區(qū)別:
“==”和equals方法究竟有什么區(qū)別松蒜?
- ==和equals都可以比較地址扔茅。==是運算符,equals是方法秸苗,方法可以通過重寫改變其行為召娜,如String的equals就是比較字符串內(nèi)容。
重寫和重載:重寫是子類對父類的允許訪問的方法的實現(xiàn)過程進(jìn)行重新編寫, 返回值和形參都不能改變惊楼。即外殼不變萤晴,核心重寫吐句。重載(overloading) 是在一個類里面,方法名字相同店读,而參數(shù)不同嗦枢。返回類型可以相同也可以不同。
- 同步指同一時間只能一個線程執(zhí)行該方法屯断,其他線程需要等待文虏。異步指多個線程可以同時執(zhí)行某個方法,并共享同一資源殖演。
同步可以讓訪問的資源具有安全性氧秘,因為同一時間只能一個線程對其進(jìn)行訪問。但是效率不高趴久。
異步對訪問的資源會造成不穩(wěn)定性丸相,比如多個線程同時訪問一個資源,一個在修改彼棍、一個在刪除灭忠、一個在讀取,這樣可能會造成資源的混亂座硕。但是由于同時運行弛作, 執(zhí)行效率得到提高。 - error是系統(tǒng)錯誤华匾,代碼不能處理的錯誤映琳,比如內(nèi)存溢出、堆棧溢出等蜘拉。
exception是程序異常萨西,可以通過代碼try-catch進(jìn)行處理,比如空指針異常旭旭,數(shù)組越界等谎脯。 - final是修飾符,可以修飾類(不能被繼承)您机、屬性(常量)、和方法(不能被重寫)年局。
finally是異常處理塊中的代碼塊际看,表示無論如何都會執(zhí)行的代碼塊。
finalize是Object類的方法矢否,該方法在對象被垃圾回收之前執(zhí)行的方法仲闽。 - public公共修飾符,表示任意類都可以訪問僵朗。
protected為受保護(hù)的修飾符赖欣,表示同類屑彻、同包以及不同包但是父子關(guān)系的是可以訪問。
不寫表示默認(rèn)修飾符顶吮,或者稱為package修飾符社牲,該修飾符表示只有同類或同包下的類可以訪問,出了這個包就不能訪問了悴了。
private為私有修飾符搏恤,表示只有同類中可以訪問,出了這個類就不能訪問了湃交。 - 用最有效率的方法算出2乘以8等於幾 2《 3
將2的二進(jìn)制向左移3位熟空。java中用<<來移位。 - .heap和stack有什么區(qū)別搞莺。
heap表示堆息罗,stack表示棧。堆中放對象才沧,棧中放引用變量迈喉。
堆空間是一個無序的空間,棧是先進(jìn)后出的結(jié)構(gòu)糜工。 - .什么是java序列化弊添,如何實現(xiàn)java序列化?
序列化就是一種用來處理對象流的機制捌木,所謂對象流也就是將對象的內(nèi)容進(jìn)行流化油坝。可以對流化后的對象進(jìn)行讀寫操作刨裆,也可將流化后的對象傳輸于網(wǎng)絡(luò)之間澈圈。序 列化是為了解決在對對象流進(jìn)行讀寫操作時所引發(fā)的問題。
序列化的實現(xiàn):將需要被序列化的類實現(xiàn)Serializable接口帆啃,該接口沒有需要實現(xiàn)的方法瞬女,implements Serializable只是為了標(biāo)注該對象是可被序列化 的,然后使用一個輸出流(如:FileOutputStream)來構(gòu)造一個ObjectOutputStream(對象流)對象努潘,接著诽偷,使用ObjectOutputStream對象的 writeObject(Object obj)方法就可以將參數(shù)為obj的對象寫出(即保存其狀態(tài)),要恢復(fù)的話則用輸入流疯坤。