Java之巢狀介面詳解(附原始碼)
package com.mufeng.theninthchapter; class A { interface B { void f(); } public class BImp implements B { @Override public void f() { // TODO Auto-generated method stub } } private class BImp2 implements B { @Override public void f() { // TODO Auto-generated method stub } } public interface C { void f(); } class CImp implements C { @Override public void f() { // TODO Auto-generated method stub } } private class CImp2 implements C { @Override public void f() { // TODO Auto-generated method stub } } private interface D { void f(); } private class DImp implements D { @Override public void f() { // TODO Auto-generated method stub } } public class DImp2 implements D { @Override public void f() { // TODO Auto-generated method stub } } public D getD() { return new DImp2(); } private D dRef; public void receiveD(D d) { dRef = d; dRef.f(); } } interface E { interface G { void f(); } public interface H { void f(); } void g(); // Cannot be private within an interface: // private interface I{ // void f(); // } } public class NestingInterfaces { public class BImp implements A.B { @Override public void f() { // TODO Auto-generated method stub } } class CImp implements A.C { @Override public void f() { // TODO Auto-generated method stub } } // Cannot implement a private interface except // within that interface's defining class // class DImp implements A.D { // @Override // public void f() { // // TODO Auto-generated method stub // // } // } class EImp implements E { @Override public void g() { // TODO Auto-generated method stub } } class EGImp implements E.G { @Override public void f() { // TODO Auto-generated method stub } } class EImp2 implements E { @Override public void g() { // TODO Auto-generated method stub } class EG implements E.G { @Override public void f() { // TODO Auto-generated method stub } } } public static void main(String[] args) { A a = new A(); // Can't access A.D // !A.D ad=a.getD(); // Doesn't return anything but A.D //!A.DImp2 di2 = a.getD(); //Cannot access a member of the interface //!a.getD().f(); //Only another A can do anything with getD(): A a2=new A(); a2.receiveD(a.getD()); } }
原始碼解析
在類中巢狀介面的語法是相當顯而易見的,就像非巢狀介面一樣,可以擁有public和“包訪問”兩種可視性。 作為一種新新增的方式,介面也可以被實現為private的,就像在A.D中所看到的(相同的語法既適用於巢狀介面,也適用於巢狀類)。那麼private的巢狀介面能帶來什麼好處呢?讀者可能會猜想,它只能夠被實現為DImple中的一個private內部類,但是A.DImp2展示了它同樣可以被實現為public類。但是,A.DImp2只能被其自身所使用。你無法說它實現了一個private介面D。因此,實現一個private介面只是一種方式,它可以強制該介面中的方法定義不要新增任何型別資訊(也就是說,不允許向上轉型)。 getD()相關推薦
Java之巢狀介面詳解(附原始碼)
package com.mufeng.theninthchapter; class A { interface B { void f(); } public class BImp implements B { @Override public void f() { // TODO
Java之區域性內部類和匿名內部類的區別詳解(附原始碼)
前言 前面提到過,可以在程式碼塊裡建立內部類,典型的方式是在一個方法體裡面建立。區域性內部類不能有訪問說明符,因為它不是外圍類的一部分;但是他可以訪問當前程式碼塊內的常量,以及此外圍類
Java 中break和continue結合標籤標示符中斷迴圈示例詳解(附原始碼)
臭名昭著的goto 程式語言中一開始就有goto關鍵詞了。事實上,goto起源於組合語言的程式控制:“若條件A成立,則跳到這裡;否則跳到那裡”。如果閱讀由編譯器最終生成的彙編程式碼,就會
NodeJS中的事件(EventEmitter) API詳解(附原始碼)
EventEmitter 簡介 EventEmitter 是 NodeJS 的核心模組 events 中的類,用於對 NodeJS 中的事件進行統一管理,用 events 特定的 API 對事件進行新增、觸發和移除等等,核心方法的模式類似於釋出訂閱。 實現 EventEm
Android跨程序通訊AIDL詳解(附原始碼)
概述 AIDL:Android Interface Definition Language,即Android介面定義語言,記住,它是一門語言,設計它的目的就是為了實現跨程序通訊,我們知道Android的每一個程序都執行在獨立的記憶體中,程序之間程式碼是不能愉快
“全棧2019”Java第八十四章:介面中巢狀介面詳解
難度 初級 學習時間 10分鐘 適合人群 零基礎 開發語言 Java 開發環境 JDK v11 IntelliJ IDEA v2018.3 文章原文連結 “全棧2019”Java第八十四章:介面中巢狀介面詳解 下一章 “
Redis集群之配置文件詳解(待完善)
enable ice local ise bare config 停止 databases end 運維Redis集群的核心任務就是配置文件Redis.conf 命令行將現使用的Redis配置參數導出到 redis.conf.bak文件 grep ‘^[^#]‘ /etc
Java Scanner 類詳解(附例子)學習
在筆試程式設計過程中,關於資料的讀取如果迷迷糊糊,那後來的程式設計即使想法很對,實現很好,也是徒勞,於是在這裡認真總結了Java Scanner 類的使用 通過 Scanner 類來獲取使用者的輸入,下面是建立 Scanner 物件的基本語法: Scanner s =
Java 開發必備面試題詳解(技術+人事)
作為一名程式猿,無論新手還是老司機,面試求職始終是你需要直面的一件事情。首先梳理自己的知識體系,針對性準備,會有事半功倍的效果。我們往往會把重點放在技術上,而忽略了人事部分,實際上人事面試也會影響到最終的結果,把每一個環節做好,最終的結果自然不會差。 本 Chat 就為大家提供了一份詳盡的 Jav
Android之Activity啟動流程詳解(基於api28)
### 前言 Activity作為Android四大元件之一,他的啟動絕對沒有那麼簡單。這裡涉及到了系統服務程序,啟動過程細節很多,這裡我只展示主體流程。activity的啟動流程隨著版本的更替,程式碼細節一直在進行更改,每次都會有很大的修改,如android5.0 android8.0。我這裡的版本是基於
Objective-C屬性詳解(附程式碼)
宣告 在Objective-C中,有兩種宣告變數的方法,第一種直接宣告: @interface Person : NSObject { NSString *name; NSString *sex; NSString *age;
XMPPFramework初始化、登入、註冊詳解(附程式碼)
第一步、新增依賴 > 拷貝 <XMPPFramework>/Vendor/CocoaLumberjack 到專案根目錄下,add files...,選擇 CocoaLumberjack 資料夾 > 同樣的步驟,拷貝 CocoaAsync
兒童節特刊 | 如何練好手眼協調能力(手眼標定詳解,附原始碼)
當嬰幼兒看到物體時,首先通過眼睛獲取資訊,傳輸到大腦進行理解,最終通過手來操作完成玩具的抓取、放置。手、眼、腦協同是人類和少數動物的一項特殊技能,通過經常玩一些簡單的益智玩具,可以逐漸鍛鍊增強孩子的手眼協調能力,同時可以作用到大腦,促進孩子的智力發育。 商家們也看到了這塊領域,設計出很多益智玩具和遊戲,如圖1
GO語言slice詳解(結合原始碼)
一、GO語言中slice的定義 slice 是一種結構體型別,在原始碼中的定義為: src/runtime/slice.go type slice struct { array unsafe.Pointer len int cap int } 從定義中可以看到,slice
自然語言處理之:c++中文分詞(附原始碼)
githup地址:https://github.com/jbymy 一、簡介 中文分詞是地然語言處理中的最基礎的環節,到目前為止已經有不少優秀的分詞工具的出現,如“中科院分詞”,“結
“全棧2019”Java第六十七章:內部類、巢狀類詳解
難度 初級 學習時間 10分鐘 適合人群 零基礎 開發語言 Java 開發環境 JDK v11 IntelliJ IDEA v2018.3 文章原文連結 “全棧2019”Java第六十七章:內部類、巢狀類詳解 下一章 “全棧2019”Java第六十八章:外部類訪問內部類
Java介面 詳解(一)
一、基本概念 介面(Interface),在JAVA程式語言中是一個抽象型別,是抽象方法的集合。介面通常以interface來宣告。一個類通過繼承介面的方式,從而來繼承介面的抽象方法。 如果一個類只由抽象方法和全域性常量組成,那麼這種情況下不會將其定義為一個
Java定時任務排程工具詳解(5)— Quartz 之 Trigger
五、淺談Trigger Trigger是什麼 Quartz中的觸發器用來告訴排程程式作業什麼時候觸發 即Trigger物件是用來觸發執行Job的 Quartz框架中的Trigger示意圖 觸發器通用屬性 JobKey:表示job例項的標識,觸發
Java學習筆記(31)--介面 詳解(一)
一、基本概念 介面(Interface),在JAVA程式語言中是一個抽象型別,是抽象方法的集合。介面通常以interface來宣告。一個類通過繼承介面的方式,從而來繼承介面的抽象方法。 如果一個類只由抽象方法和全域性常量組成,那麼這種情況下不會將其定義為一個抽象類。只會定義為一個介面,所以介面嚴格的來
Java中繼承、介面、多型的作用詳解(純理論)
一、繼承、介面與多型的相關問題: 1、 繼承的作用?好處?壞處? 繼承:通過繼承實現程式碼複用。Java中所有的類都是通過直接或間接地繼程java.lang.Object類得到的。繼承而得到的類稱為子類,被繼承的類稱為父類。子類不能繼承父類中訪問許可權為private的成員變數和方法。子類可以重寫父類的方法