摘要:即接口是用來描述對象具有的某種功能,而不關心具體實現。或者說,接口好比服務商指定的標準,由代加工工廠遵守來生產。內部類允許在類中定義其它類,這種定義在類中的類叫做嵌套類。局部類是聲明,匿名類是表達式。匿名類當需要聲明字段或其它方法時。
接口
在繼承那篇博文里,我們已經簡單了解了 Java 接口的概念。即:接口是用來描述對象具有的某種「功能」,而不關心具體實現。或者說,接口好比服務商指定的標準,由代加工工廠遵守來生產。
這里是一個 Java 里的接口示例:
public interface Comprable{ int compareTo(T other); }
Java 8 中,接口里可以包含:
default 方法
靜態方法
方法簽名
常量定義
在Java 里,定義了一些標記接口(tagging interface),實現了這些接口的類,語義上應具有接口的特性。如:
實現(implements)Comparable接口的類,我們默認其具有可比較的特性;
實現Clonable接口的類,我們默認其具有可克隆的特性(Object 類默認實現該接口,具有淺拷貝的能力);
實現Serializable接口的類,我們默認其具有可序列化的特性。
Java 的接口還有一個比較重要的應用,那就是回調。
回調是一種比較常見的設計模式,其本質是在發生某種事件時應采取的某種行為。
內部類Java 允許在類中定義其它類,這種定義在類中的類叫做嵌套類(nested class)。其中,
靜態的嵌套類叫做靜態嵌套類
非靜態的嵌套類叫做內部類
嵌套類主要有如下兩種功能:
邏輯上劃分類的作用范圍
增強封裝特性
主要有兩種特別的內部類:
局部類:定義在代碼塊中的類
匿名類:
局部類局部類可訪問的成員范圍如下:
局部類可以訪問定義為 final 或者本質上是 final (初始化之后不會被更改)的變量以及方法的參數。
局部類不能定義或聲明靜態成員
代碼塊中不能定義接口(接口本質上是靜態的)
局部類中不允許有靜態初始化或者接口成員
局部類中可以定義常量值變量(可以在編譯時期轉換的值)
匿名類匿名類允許同時定義和初始化一個類,常被用作那些只使用一次的場景中。局部類是聲明,匿名類是表達式。
下面是一個匿名類的使用示例代碼:
interface SomeInterface{ public void doSomething(); } public void function(){ SomeInterface someInterface = new SomethingInterface(){ @Override public void doSomething(){ // implement here... } } }
匿名類中主要包含如下內容:
new 操作符
需要實現的接口名稱
類似于無參構造的形式
一個實現類的體
匿名類可以訪問的成員范圍是:
匿名類可以訪問外部類的成員
匿名類可以訪問外部類聲明為 final 或者本質上是 final 的局部變量
匿名類中定義定義的變量會屏蔽外部類的同名變量
Lambda 表達式Lambda 表達式中包含的內容如下:
用逗號分隔的形參列表(可以忽略數據類型,如果只有一個形參,那么小括號也是可以忽略的)
箭頭 →
方法體(如果方法體中只有一行代碼,那么花括號也可以省略)
Lambda 表達式中不存在變量的屏蔽問題。
如果 Lambda 表達式中引用已經存在的方法,那么可以用 類::方法名 來引用方法。
有四種類型的方法引用:
類型 | 引用方式 |
---|---|
引用靜態方法 | 類名::方法名 |
引用特定對象的方法 | 對象名::方法名 |
引用特定類型的任意對象的示例方法 | 類型::方法名 |
引用構造方法 | 類名::new |
局部類:當需要使用一個類的多個示例時。
匿名類:當需要聲明字段或其它方法時。
Lambda 表達式:
當需要把特定的代碼塊傳給其它方法作為參數
當需要使用一個接口的「實例」時
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/68885.html
摘要:快速了解繼承在的繼承關系里子類可以從獲取父類的所有的公共和受保護成員字段方法和內部類。阻止繼承有些情況下,我們可能不希望子類覆蓋父類的方法,這時候,用關鍵字修飾方法即可實現該目的。 和現實世界中:子女可以繼承父母的一些特征(如:基因)、財產等一樣。OOP 中也有提供類似的特性,一個類完全可以從其它類里獲得一些屬性和方法,而不需要我們自己重新定義。這種特性簡單但強大 (Simple an...
摘要:本人生性愚鈍,在大學期間沒能好好領略等面向對象編程的魅力。現借助一些較為權威的書籍資料,將基礎知識里比較重要的東西整理成文,命名從基礎學。如果博文不慎侵犯了您的著作權,請聯系我。 和很多大學一樣,我的學校也是從 Java 、C++ 入手,教給我們面向對象 (OOP) 的思想。本人生性愚鈍,在大學期間沒能好好領略 Java 等面向對象編程的魅力。現借助一些較為權威的書籍資料,將 Java...
摘要:對象之間耦合度過高的系統,必然會出現牽一發而動全身的情形。控制被反轉之后,獲得依賴對象的過程由自身管理變為了由容器主動注入。于是,他給控制反轉取了一個更合適的名字叫做依賴注入。 Spring還可以這么學--IoC(控制反轉) / DI(依賴注入)理解 聲明:文章的前三部分參考博文:https://www.cnblogs.com/Nouno...這篇文章首發是在我的個人微信訂閱號每天學編...
摘要:從零開始單排學設計模式的國服排位之旅,今天正式開啟目前段位定級賽這篇文章來總結下類圖,本來不打算講類圖的,因為我在學習設計模式的時候,一遇到有關的就會自動忽略,一看感覺就很復雜。關聯關系用實現箭頭來表示。 閱讀本文大概需要 3.5 分鐘。 本篇是設計模式系列的開篇,雖然之前也寫過相應的文章,但是因為種種原因后來斷掉了,而且發現之前寫的內容也很渣,不夠系統。 所以現在打算重寫,加上距離現...
摘要:所幸,提供了一套機制,用于在程序程序出錯出現異常時,進行報告錯誤保存工作結果讓用戶以更完善的方式退出程序亦即異常處理機制。顧名思義,該機制用于對程序運行中不正常的情況進行處理。如拋出比更加語義化學會把異常傳遞,即早拋出,晚捕獲 初識 代碼的世界和現實世界一樣,不會一帆風順,起碼不會像我們想象中的那么順利。寫代碼的是人,人的思維存在局限性,這種局限性,體現在代碼中,就是漏洞。倘若一段程序...
閱讀 1177·2021-11-24 09:39
閱讀 2685·2021-09-28 09:35
閱讀 1078·2019-08-30 15:55
閱讀 1370·2019-08-30 15:44
閱讀 884·2019-08-29 17:00
閱讀 1979·2019-08-29 12:19
閱讀 3317·2019-08-28 18:28
閱讀 695·2019-08-28 18:10