摘要:復用代碼是眾多引入注目的功能之一。但要想成為極具革命性的語言,僅僅能夠復制代碼并對之加以改變是不夠的,它還必須能夠做更多的事情。
復用代碼是Java眾多引入注目的功能之一。但要想成為極具革命性的語言,僅僅能夠復制代碼并對之加以改變是不夠的,它還必須能夠做更多的事情。
1.組合語法將對象引用置于新類中.
初始化對象引用:1.定義時初始化;2.構造器初始化;3.使用之前(惰性初始化);4.實例初始化(代碼塊).
2.繼承語法采用extends關鍵字實現.
采用現有類的類型來創建新類,無需改變現有類的形式.
即使一個類只有包訪問權限,其public main仍然是可訪問的.
繼承并不只是復制基類的接口.當創建了一個當初類的對象時,該對象包含了一個基類的子對象,和直接創建的基類對象是一樣的,區別在于,后者來自外部,而基類的子對象被包裝在導出類對象內部.
基類初始化:構造器.如果沒有,會合成一個默認的構造器,該構造器將調用基類的構造器.
調用帶參構造器:super.
調用基類構造器必須是在導出類構造器中要做的第一件事(如果做錯了,編譯器會提醒).
3.代理Java語言不支持直接代理.
將一個成員的對象置于所要構造的類中(就像組合),但于此同時在新類中暴露了該成員對應的所有方法(就像繼承).
4.結合使用組合與繼承確保正確清理:try{}finally,先清理導出類,在清理基類.
如果Java的基類擁有某個已被多次重載的方法名稱,那么在導出類中重新定義個該方法名稱并不會屏蔽其在基類中的任何版本.
使用@Override(不是關鍵字)注解覆蓋與基類完全相同的特征簽名及返回類型具有相同名稱的方法.
5.在組合與繼承之間選擇組合和繼承都允許在新的類中放置子對象,組合是顯示地這樣做,而繼承則是隱式地做.
組合技術通常用于想在新類中使用現有類的功能而非他的接口這種情形.
在繼承的時候,使用某個現有類,并開發一個它的特殊版本.
"is-a"(是一個)的關系是用繼承來表達的,而"has-a"(有一個)的關系是用組合來表達的.
6.protected關鍵字將某些事物盡可能對這個世界隱藏起來,但仍然允許導出類的成員來訪問它們.
就類用戶而言,這是private的,但對于任何繼承與此類的導出類或其他任何位于同一個包內的類來說,它卻是可以訪問的(protected提供了包內訪問權限).
7.向上轉型將根置于頁面的頂端,然后逐漸向下.由導出類轉型成基類,在繼承圖上是向上移動的,因此一般稱為向上轉型(總是安全的).
在向上轉型的過程中,類接口中唯一可能發生的事情是丟失方法,而不是獲取它們.
8.final關鍵字無法改變的(不想改變的理由:設計或效率).
final數據:對于基本數據類型,final使數值恒定不變;而對用對象引用,final使引用恒定不變(無法改為指向另一個對象,對象自身可以被修改).
static final 域只占據一段不能改變的存儲空間,基本用全寫大寫字母命名.
空白final:聲明時為賦值,使用前必須被初始化(提供了更大的靈活性).
final參數:無法在方法中更改參數引用所指向的對象(主要用來向匿名內部類傳遞參數).
final方法:把方法鎖定,防止任何繼承類修改它的含義.
類中所有的private方法都隱式地被制定是final的.
覆蓋只有在某方法是基類接口的一部分時才會出現,否則,僅具有相同名稱(基類方法設置為private是因為它所歸屬的類的組織結構的原因).
final類:不允許繼承(對該類的設計永不需要做任何變動/安全).
不論類是都被定義為final,相同的規則都適用于定義為final的域.
final類中所有的方法都隱式指定為師final的.
忠告:慎用final.
9.初始化及類的加載在許多傳統語言中,程序是作為啟動過程的一部分立刻被加載的,然后是初始化,緊接著程序開始運行.
類的代碼在初次使用時才加載,即加載發生于創建類的第一個對象之時,或者static域或方法被訪問時.
END
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/71550.html
摘要:在類的構造方法中。對基類構造器的調用必須放到子類構造器的第一行。約定用大寫字母下劃線命名規范空白空白指被聲明為但又未給定初值的域,但可以在構造方法必須在域的定義處代碼塊或構造器中對進行賦值。 點擊進入我的博客 復用代碼是Java眾多引人注目的功能之一,但要成為極具革命性的語言,僅僅能夠復制代碼并對之加以改變是不夠的,它還必須能夠做更多的事情。 7.1 組合 組合語法 就是在當前類中產...
摘要:代碼使用泛型類中不依賴于類型參數的方法。委托依賴于動態綁定,因為它要求給定的方法調用可以在運行時調用不同的代碼段。委托捕獲操作并將其發送給另一個對象。委托可以被看作是在對象層次上的復用機制,而繼承是類層次上的復用機制。 大綱 設計可復用的類 繼承和重寫 重載(Overloading) 參數多態和泛型編程 行為子類型與Liskov替換原則 組合與委托 設計可復用庫與框架 API和庫...
摘要:背景介紹將程序打包,無論是為了代碼復用,還是發布應用,都是必不可少的的技能,上次總結了一下利用打包成,這次我來說如何打包。導入往往我們使用打包不只是為了雙擊使用,有時也是為了代碼復用。礙于時間關系,將留待下一篇文章進行總結。 背景介紹 將程序打包,無論是為了代碼復用,還是發布應用,都是必不可少的的技能,上次總結了一下python利用cxfreeze打包成exe,這次我來說java如何打...
摘要:學習筆記方法方法就是一個功能塊返回數值,結束方法方法定義格式修飾符方法返回類型方法名形參列表方法傳值值傳遞,沒有引用傳遞面向對象以類的方式組織代碼,以對象的方式組織類對對象的抽象對象具體的事物對象以類為模板以類的方式組織代碼,以對象的方式組 JAVA學習筆記 1.方法 方法就是一個功能塊 return ,返回數值,結束方法 方法定義格式: [修飾符] 方法返回類型 方法名(形參列表...
摘要:輸入流的復用在實際的開發中是很常見的場景。根據對的抽象,流的復用是矛盾的。檢查當前流類是否支持標記功能這三個方法能有效地解決流復用的問題。 輸入流的復用在實際的開發中是很常見的場景。 在實際應用中,很多需要提供輸入數據的API都是用IputStream類作為其參數類型,比如XML文檔的解析API就是一個典型的例子。同時很多數據的提供者允許使用者通過InputStream類的對象方式來...
閱讀 2708·2021-11-25 09:43
閱讀 2090·2021-11-24 09:39
閱讀 1973·2021-11-17 09:33
閱讀 2761·2021-09-27 14:11
閱讀 1860·2019-08-30 15:54
閱讀 3230·2019-08-26 18:27
閱讀 1269·2019-08-23 18:00
閱讀 1816·2019-08-23 17:53