Java面試基礎(二)

11、abstract class和interface的區別

面向對象設計的重點在於抽象,那Java接口和Java抽象類就有它存在的必然性了。

Java接口和Java抽象類代表的就是抽象類型,就是我們需要提出的抽象層的具體表現。OOP面向對象的編程,如果要提高程序的複用率,增加程序 的可維護性,可擴展性,就必須是面向接口的編程,面向抽象的編程,正確地使用接口、抽象類這些太有用的抽象類型做爲你結構層次上的頂層。

Java接口和Java抽象類有太多相似的地方,又有太多特別的地方,究竟在什麼地方,纔是它們的最佳位置呢?把它們比較一下,你就可以發現了。

1、Java接口和Java抽象類最大的一個區別,就在於[color=blue][b]Java抽象類可以提供某些方法的部分實現,而Java接口不可以[/b][/color],這大概就是Java抽象類唯一的優點吧,但這個優點非常有用。
如 果向一個抽象類里加入一個新的具體方法時,那麼它所有的子類都一下子都得到了這個新方法,而Java接口做不到這一點,如果向一個Java接口裏加入一個 新方法,所有實現這個接口的類就無法成功通過編譯了,因爲你必須讓每一個類都再實現這個方法才行,這顯然是Java接口的缺點。

2、一個抽象類的實現只能由這個抽象類的子類給出,也就是說,這個實現處在抽象類所定義出的繼承的等級結構中,而由於Java語言的單繼承性,所以抽象類作爲類型定義工具的效能大打折扣。
在這一點上,Java接口的優勢就出來了,任何一個實現了一個Java接口所規定的方法的類都可以具有這個接口的類型,而[color=blue][b]一個類可以實現任意多個Java接口[/b][/color],從而這個類就有了多種類型。

3、從第2點不難看出,Java接口是定義混合類型的理想工具,混合類表明一個類不僅僅具有某個主類型的行爲,而且具有其他的次要行爲。

4、結合1、2點中抽象類和Java接口的各自優勢,具精典的設計模式就出來了:聲明類型的工作仍然由Java接口承擔,但是同時給出一個Java 抽象類,且實現了這個接口,而其他同屬於這個抽象類型的具體類可以選擇實現這個Java接口,也可以選擇繼承這個抽象類,也就是說在層次結構中,Java 接口在最上面,然後緊跟着抽象類,哈,這下兩個的最大優點都能發揮到極至了。這個模式就是“缺省適配模式”。
在Java語言API中用了這種模式,而且全都遵循一定的命名規範:Abstract +接口名。

Java接口和Java抽象類的存在就是爲了用於具體類的實現和繼承的,如果你準備寫一個具體類去繼承另一個具體類的話,那你的設計就有很大問題了。Java抽象類就是爲了繼承而存在的,它的抽象方法就是爲了強制子類必須去實現的。

使用Java接口和抽象Java類進行變量的類型聲明、參數的類型聲明、方法的返還類型說明,以及數據類型的轉換等。而不要用具體Java類進行變量的類型聲明、參數的類型聲明、方法的返還類型說明,以及數據類型的轉換等。

轉自:[url]http://blog.csdn.net/sunboard/article/details/3831823[/url]

12、Error與Exception的區別:

Error類和Exception類都繼承自Throwable類。

1)Error的繼承關係:

[img]http://dl.iteye.com/upload/attachment/543646/3f0cf21e-e94e-31fb-a93f-416904a8e017.gif[/img]

2)Exception的繼承關係:

[img]http://dl.iteye.com/upload/attachment/543646/3f0cf21e-e94e-31fb-a93f-416904a8e017.gif[/img]

二者的不同之處:

Exception:
1.可以是可被控制(checked) 或不可控制的(unchecked)
2.表示一個由程序員導致的錯誤
3.應該在應用程序級被處理

Error:
1.總是不可控制的(unchecked)
2.經常用來用於表示系統錯誤或低層資源的錯誤
3.如何可能的話,應該在系統級被捕捉

Java 中定義了兩類異常:

1) Checked exception: 這類異常都是Exception的子類 。異常的向上拋出機制進行處理,假如子類可能產生A異常,那麼在父類中也必須throws A異常。可能導致的問題:代碼效率低,耦合度過高。
  2) Unchecked exception: 這類異常都是RuntimeException的子類,雖然RuntimeException同樣也是Exception的子類,但是它們是非凡的,它們不能通過client code來試圖解決,所以稱爲Unchecked exception 。

Java 中異常類的繼承關係圖:

[img]http://dl.iteye.com/upload/attachment/543656/3d0ef3e8-dc15-31f7-a8d0-274c4f636091.gif[/img]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章