java介面巢狀【Z】
在Java語言中,介面可以巢狀在類或其它介面中。由於Java中interface內是不可以巢狀class的,所以介面的巢狀就共有兩種方式:class巢狀interface、interface巢狀interface。
1. class巢狀interface
這時介面可以是public,private和package的。重點在private上,被定義為私有的介面只能在介面所在的類被實現。可以被實現為
public的類也可以被實現為private的類。當被實現為public時,只能在被自身所在的類內部使用。只能夠實現介面中的方法,在外部不能像正
常類那樣上傳為介面型別。
2. interface巢狀interface
由於介面的元素必須是public的,所以被巢狀的介面自動就是public的,而不能定義成private的。在實現這種巢狀時,不必實現被巢狀的介面。
程式示例(摘抄改編自《Thinking in Java》):
class
A
{
private interface D {
void f();
}
private class DImp implements D {
public void f() {}
}
public class DImp2 implements D {
public void f() {}
}
public D getD() { return new DImp2(); }
private D dRef;
public void receiveD(D d) {
dRef = d;
dRef.f();
}
}
public class NestingInterfaces {
public static void main(String[] args) {
A a = new A();
// The type A.D is not visible
// ! A.D ad = a.getD();
// Cannot convert from A.D to A.DImp2
// ! A.DImp2 di2 = a.getD();
// The type A.D is not visible
// ! a.getD().f();
A a2 = new A();
a2.receiveD(a.getD());
}
}
private interface D {
void f();
}
private class DImp implements D {
public void f() {}
}
public class DImp2 implements D {
public void f() {}
}
public D getD() { return new DImp2(); }
private D dRef;
public void receiveD(D d) {
dRef = d;
dRef.f();
}
}
public class NestingInterfaces {
public static void main(String[] args) {
A a = new A();
// The type A.D is not visible
// ! A.D ad = a.getD();
// Cannot convert from A.D to A.DImp2
// ! A.DImp2 di2 = a.getD();
// The type A.D is not visible
// ! a.getD().f();
A a2 = new A();
a2.receiveD(a.getD());
}
}
其中語句A.D ad = a.getD()和a.getD().f()的編譯錯誤是因為D是A的私有介面,不能在外部被訪問。語句A.DImp2 di2 = a.getD()的錯誤是因為getD方法的返回型別為D,不能自動向下轉型為DImp2型別。
相關文章
- 類與介面(三)java中的介面與巢狀介面Java巢狀
- Java進階07 巢狀類Java巢狀
- java定時任務巢狀Java巢狀
- Java 程式碼規範if巢狀Java巢狀
- Java | 靜態巢狀類(Static Nested Class)Java巢狀
- 列表巢狀操作巢狀
- vue路由巢狀Vue路由巢狀
- 【java】【集合】去除ArrayList中的元素、ArrayList巢狀ArrayListJava巢狀
- SCSS 巢狀屬性CSS巢狀
- SCSS 巢狀規則CSS巢狀
- 展開巢狀列表巢狀
- Locust 任務巢狀巢狀
- Oracle 巢狀表(轉)Oracle巢狀
- 巢狀類遞迴巢狀遞迴
- vue(19)巢狀路由Vue巢狀路由
- 巢狀子查詢巢狀
- Blazor巢狀傳遞Blazor巢狀
- Java JDK11基於巢狀的訪問控制JavaJDK巢狀
- java中如何將巢狀迴圈效能提高500倍Java巢狀
- MySQL Join原理分析(緩衝塊巢狀與索引巢狀迴圈)MySql巢狀索引
- Android筆記之Kotlin、Java的內部類?巢狀類?Android筆記KotlinJava巢狀
- 碎片化學習Java(二十)Java for迴圈巢狀輸出指定圖案Java巢狀
- html的巢狀規則HTML巢狀
- vue-router 巢狀路由Vue巢狀路由
- JavaScript字串引號巢狀JavaScript字串巢狀
- 封裝多型巢狀封裝多型巢狀
- Python .get 巢狀 JSON 值Python巢狀JSON
- repeater中巢狀放入RadioButtonList巢狀
- 【Qt6】巢狀 QWindowQT巢狀
- nginx 如何實現 if 巢狀Nginx巢狀
- Vue中的巢狀路由Vue巢狀路由
- vue巢狀元件傳參Vue巢狀元件
- 頁面巢狀,介面套娃,除了用iframe,還有其他方式嗎?巢狀
- 為什麼HTML不能巢狀PHP,而PHP檔案卻可以巢狀HTMLHTML巢狀PHP
- 對比SQL中簡單巢狀查詢與非巢狀查詢CFSQL巢狀
- 一對一原始碼,java 圖片之間相互巢狀,合成原始碼Java巢狀
- sql server中巢狀事務*SQLServer巢狀
- ViewPager巢狀fragment簡單使用Viewpager巢狀Fragment
- golang的巢狀事務管理Golang巢狀