freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

java多形性ppt課件-資料下載頁

2024-10-19 04:52本頁面
  

【正文】 WithInner$ 如果內(nèi)部類是匿名的,那么編譯器會簡單地生成數(shù)字,把它們作為內(nèi)部類標識符使用。若內(nèi)部類嵌套于其他內(nèi)部類中,則它們的名字簡單地追加在一個 $以及外部類標識符的后面。 這種生成內(nèi)部名稱的方法除了非常簡單和直觀以外,也非常 “ 健壯 ” ,可適應大多數(shù)場合的要求。由于它是 Java的標準命名機制,所以產(chǎn)生的文件會自動具備 “ 與平臺無關 ” 的能力。 51 :用內(nèi)部類控制框架 ? ? ? ? 52 :構建器的調(diào)用順序 ?對于一個復雜的對象,構建器的調(diào)用遵照下面的順序: (1) 調(diào)用基礎類構建器。這個步驟會不斷重復下去,首先得到構建的是分級結構的根部,然后是下一個衍生類,等等。直到抵達最深一層的衍生類。 (2) 按聲明順序調(diào)用成員初始化模塊。 (3) 調(diào)用衍生構建器的主體。 ?看看一個例子,它展示了按構建順序進行合成、繼承以及多形性的效果: 53 :繼承和 finalize() ?通過 “ 合成 ” 方法創(chuàng)建新類時,永遠不必擔心對那個類的成員對象的收尾工作。每個成員都是一個獨立的對象,所以會得到正常的垃圾收集以及收尾處理 —— 無論它是不是不自己某個類一個成員。但在進行初始化的時候,必須覆蓋衍生類中的 finalize()方法 —— 如果已經(jīng)設計了某個特殊的清除進程,要求它必須作為垃圾收集的一部分進行。覆蓋衍生類的 finalize()時,務必記住調(diào)用 finalize()的基礎類版本。否則,基礎類的初始化根本不會發(fā)生。下面這個例子便是明證: 54 :構建器內(nèi)部的多形性 ?從概念上講,構建器的職責是讓對象實際進入存在狀態(tài)。在任何構建器內(nèi)部,整個對象可能只是得到部分組織—— 只知道基礎類對象已得到初始化,但卻不知道哪些類已經(jīng)繼承。然而,一個動態(tài)綁定的方法調(diào)用卻會在分級結構里 “ 向前 ” 或者 “ 向外 ” 前進。它調(diào)用位于衍生類里的一個方法。如果在構建器內(nèi)部做這件事情,那么對于調(diào)用的方法,它要操縱的成員可能尚未得到正確的初始化。 通過觀察下面這個例子 : 55 :構建器內(nèi)部的多形性 ?前面講的初始化順序并不十分完整,而那是解決問題的關鍵所在。初始化的實際過程是這樣的: (1) 在采取其他任何操作之前,為對象分配的存儲空間初始化成二進制零。 (2) 就象前面敘述的那樣,調(diào)用基礎類構建器。 (3) 按照原先聲明的順序調(diào)用成員初始化代碼。 (4) 調(diào)用衍生類構建器的主體。 56 ?學習了多形性的知識后,由于多形性是有益的一種工具,所以看起來似乎所有東西都應該繼承。但假如過度使用繼承技術,也會使自己的設計變得不必要地復雜起來。事實上,當以一個現(xiàn)成類為基礎建立一個新類時,如首先選擇繼承,會使情況變得異常復雜。 ?一個更好的思路是首先選擇 “ 合成 ” —— 如果不能十分確定自己應使用哪一個。合成不會強迫程序設計進入繼承的分級結構中。同時,合成顯得更加靈活,因為可以動態(tài)選擇一種類型,而繼承要求在編譯期間準確地知道一種類型。請看下面的例子: 57 :純繼承與擴展 ?學習繼承時,為了創(chuàng)建繼承分級結構,最明顯的方法是采取一種 “ 純粹 ” 的手段。也就是說,只有在基礎類或“ 接口 ” 中已建立的方法才可在衍生類中被覆蓋,如下面這張圖所示: 58 :純繼承與擴展 ?可將其描述成一種純粹的 “ 屬于 ” 關系,因為一個類的接口已規(guī)定了它到底 “ 是什么 ” 或者 “ 屬于什么 ” 。通過繼承,可保證所有衍生類都只擁有基礎類的接口。如果按上述示意圖操作,衍生出來的類除了基礎類的接口之外,也不會再擁有其他什么。 ?可將其想象成一種 “ 純替換 ” ,因為衍生類對象可為基礎類完美地替換掉。使用它們的時候,根本沒必要知道與子類有關的任何額外信息。如下所示: 59 :純繼承與擴展 ?也就是說,基礎類可接收發(fā)給衍生類的任何消息,因為兩者擁有完全一致的接口。我們要做的全部事情就是從衍生上溯造型,而且永遠不需要回過頭來檢查對象的準確類型是什么。所有細節(jié)都已通過多形性獲得了完美的控制。 ?若按這種思路考慮問題,那么一個純粹的 “ 屬于 ” 關系似乎是唯一明智的設計方法,其他任何設計方法都會導致混亂不清的思路,而且在定義上存在很大的困難。但這種想法又屬于另一個極端。 60 :純繼承與擴展 ?經(jīng)過細致的研究,我們發(fā)現(xiàn)擴展接口對于一些特定問題來說是特別有效的方案??蓪⑵浞Q為“ 類似于 ” 關系,因為擴展后的衍生類 “ 類似于 ” 基礎類 —— 它們有相同的基礎接口 —— 但它增加了一些特性,要求用額外的方法加以實現(xiàn)。如下所示: 61 :純繼承與擴展 ?盡管這是一種有用和明智的做法(由具體的環(huán)境決定),但它也有一個缺點:衍生類中對接口擴展的那一部分不可在基礎類中使用。所以一旦上溯造型,就不可再調(diào)用新方法: ?若在此時不進行上溯造型,則不會出現(xiàn)此類問題。但在許多情況下,都需要重新核實對象的準確類型,使自己能訪問那個類型的擴展方法。 62 :下溯造型 ?由于在上溯造型(在繼承結構中向上移動)期間丟失了具體的類型信息,所以為了獲取具體的類型信息 —— 亦即在分級結構中向下移動 —— 必須使用 “ 下溯造型” 技術。然而,我們知道上溯造型肯定是安全的;基礎類不可能再擁有一個比衍生類更大的接口。因此,通過基礎類接口發(fā)送的每一條消息都肯定能夠接收到。但在進行下溯造型的時候,并不真的知道一個幾何形狀實際是一個圓,它完全可能是一個三角形、方形或者其他形狀。 63 :下溯造型 ?為解決這個問題,必須有一種辦法能夠保證下溯造型正確進行。只有這樣,才不會冒然造型成一種錯誤的類型,然后發(fā)出一條對象不可能收到的消息。這樣做是非常不安全的。 ?在 Java中,所有造型都會自動得到檢查和核實!所以即使只是進行一次普通的括弧造型,進入運行期以后,仍然會毫無留情地對這個造型進行檢查,保證它的確是我們所希望的那種類型。如果不是,就會得到一個ClassCastException( 類造型違例)。在運行期間對類型進行檢查的行為叫作 “ 運行期類型標識 ” ( runtime type identification RTTI)。 下面這個例子向大家演示了 RTTI的行為: 64 ?多形性 ?內(nèi)部類
點擊復制文檔內(nèi)容
教學課件相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1