設計模式和設計原則:
設計模式和設計原則是對面向對象程序設計的一個具體應用,為此我們首先需要回顧和總結一下面向對象程序設計的一些基本內容,同時也是為了引出設計模式和設計原則。
1、子類繼承所有父類的屬性和方法嗎?什么是隱藏?什么是覆蓋?
解釋一:子類是繼承了父類的所有屬性和方法,但是并不一定都可見,可認為是間接可見。所謂繼承就是指你有的我全有,即父類有的子類全都有。
下面一個問題給出了子類是否可見的一個標準。
作用域public,private,protected,以及不寫時的區別(不寫時默認為friendly)
答:區別如下:
作用域 |
當前類 |
同一package |
子孫類 |
其他package |
Public |
√ |
√ |
√ |
√ |
Protected |
√ |
√ |
√ |
× |
Friendly |
√ |
√ |
× |
× |
Private |
√ |
× |
× |
× |
如下圖給出父類和子類的繼承關系,綠色部分為父類(其中包括兩部分,即對子類不可見①和對子類可見②兩部分),綠色加上紅色部分③(由子類派生的即子類獨有的特性)為子類。說明:①雖然對于子類不可見部分但卻是子類必不可少的部分,因為③可能會調用②,而②又可能會調用①,如果子類中沒有①,那么程序就會出錯。
\子類繼承父類關系圖.gif)
解釋二:關于隱藏是指子類與父類存在同名但是有不同解釋的屬性和方法,那么父類中這些屬性和方法將會被隱藏。舉例,在父類中定義一個屬性變量i,同時在子類中也定義一個屬性變量i,此時父類中的屬性變量i將被隱藏或者說屏蔽,程序調用屬性變量i時則默認是對子類的屬性變量i的調用,同樣方法也是如此。
解釋三:關于覆蓋是指指子類與父類存在相同頭部的方法,那么父類中這些的方法將會被覆蓋或者說屏蔽。如果程序中需要調用父類中被覆蓋的方法則使用super關鍵字。
2、對象代詞的意義?super和this
super:針對隱藏和覆蓋來說,大多數情況下我們都是指當前的子類,當我們需要特定
指明訪問父類的時候,則使用super.[屬性][方法]
this:既然默認情況是指當前的子類也就是說this.加不加都是一樣的,那為什么還要用this這個詞呢?這是因為this并不是針對super產生的,而是因為我們在程序中的很多的方法需要返回當前對象,這時候this就有重要的作用。因為在很多對象的內部我們是不能直接提到該對象的名稱的,程序是不識別的。比如張三說他自己時用“我”而非“張三”,否則這是不符合常規的。
3、重載和覆蓋的關系?
相同點:兩者都是對一個方法的多次實現,或者都體現了多態性(一個內容有多種形式)
區別:覆蓋是指方法頭相同時則產生覆蓋。如父類和子類有兩個方法頭完全相同的方法,此時父類的這個方法將被覆蓋。
重載是指方法名相同但是參數不同,注意重載不區分父類和子類,即這兩個方法即可以都在父類中也可以都在子類中或者一個在父類中一個在子類中。這樣當程序調用方法時是根據其中的參數(個數、類型)進行匹配的。
4、接口的作用?
接口主要是為了解決多重繼承中繼承冗余的問題。所謂繼承冗余是指如果B繼承A,C也繼承A,D繼承B同時也繼承C,那么D中重復出現了A的內容(既有來自B的也有來自C的),這樣就產生的繼承冗余的問題。接口實際上相當于一個抽象類,但是它和類的最大區別就是它允許實現多個。通過類實現代碼復用叫做繼承extends,通過接口實現代碼復用叫做實現implements。可以說接口是變相的實現了多重繼承同時又避免的繼承冗余,所以對于面向對象的程序設計來說是不可或缺的。關鍵字interface 繼承extends 實現implements
5、異常處理的意義?
是為了摒棄錯誤。try監視可能出錯的代碼,catch處理機制通過異常對象的類型匹配來選擇通過哪種機制處理這個錯誤。意義所在:(1)、解決了程序錯誤的問題,可以人工干預、提示或者中止程序。(2)、引入了層次的問題,沒有異常處理機制時程序遇到錯誤采用的辦法是以return形式層層傳遞來處理,
posted on 2006-02-11 22:57
★yesjoy★ 閱讀(262)
評論(0) 編輯 收藏 所屬分類:
設計模式