Java_语法基础_定义规范的接口类型
接口,是一種完全抽象的設計,沒有任何實現。接口有以下3個特征:
1.所有的成員變量都是public、static、final類型。
2.所有的方法都是public、abstract類型。
3.所有的嵌套類型(類或接口)都是public、static類型。
4.即使以上3點沒有顯式的聲明也是如此。
由此可知,接口中的所有成員都是public的,因為接口是抽象的,必須由其他類所實現,故成員一定要具備足夠的訪問權限。
接口中有什么
如果聲明一個接口,并且在接口中沒有顯式聲明任何成員,那個這個接口為空嗎?在這個問題之前,先看一個簡單的實例。
例:
當類上轉為接口時,只能調用接口中聲明的方法,而不能夠調用自己類中聲明的方法。根據這個例子可以說明,通過接口類型的引用,所能調用的方法應該是在接口中聲明的,否則無法調用。
于是,我們來測試下沒有聲明任何成員的接口,看看其是否為空。
例:
這個程序可以通過編譯。也許大家會感覺很奇怪,在EmptyInterface接口中沒有聲明任何成員,為什么通過接口引用(e)還可以調用這一系列方法呢?這是因為,接口從來都不是空的,即使我們沒有顯式聲明任何方法,在接口中也默認存在9個方法,這9個方法與Object類中聲明的9個public方法相對應。這也說明,即使沒有顯式聲明任何成員的“空接口”,事實上也并非為空,因為至少存在9個方法成員。
接口不能實例化
接口是一種完全抽象的設計,不能實例化,即我們不能創建接口類型的對象,因為這樣的對象沒有任何實現,是毫無意義的。可是,下面的程序怎么來解釋呢?
例:
雖然不能像創建對象那樣使用new來實例化接口,也似乎使用new Bird來創建了接口的實例,并且實現了fly方法。該程序可以通過編譯,運行結果如下:
flying
一切都運轉正常,這是否說是接口也可以實例化呢?
其實,這一切都是假象而已。接口是完全抽象的設計,不可以實例化。細心的讀者也會發現,在編譯Instantiated.java后,會生成3個class文件,分別為Instantiated.class、Bird.class、Instantiated$1.class,前兩個并不奇怪,關鍵是第3個class文件從何而來呢?
程序中的創建方式,是使用匿名類來實現的,第3個class文件也就是從這里產生的。其實,程序中的new Bird并沒有真正的創建一個Bird類型的“接口對象”,而是創建了一個匿名類。該類實現了Bird接口,并且實現了Bird接口中的fly方法。
接口的繼承
在Java中,類不允許多重繼承,因為從多個類繼承的成員及其容易造成混淆與錯用,Java中去除了這一特性。不過,對于接口來說,因為其設計是完全抽象的,不包含任何實現,因而接口的繼承與類的繼承相比,問題相對較少,故Java中接口是可以多重繼承的。
接口中的方法都是abstract類型的,目的是要求實現接口的類去實現這些抽象方法,并通過接口引用來指向實現接口的對象,這樣就可以調用接口中的方法。故接口中都是實例方法,不允許聲明static(靜態)方法。因為靜態方法是不依賴對象而存在的,可以通過類名直接調用,也不需要創建對象。
如果子接口聲明了與父接口中相同名稱的變量,就會隱藏父類接口中的同名變量。
如果兩個接口中聲明了相同名稱的變量,當一個類實現了這兩個接口,或者子接口多重繼承這兩個接口,則對該同名變量訪問的時候,必須使用限定名稱,使用簡單名稱就會引發編譯錯誤。
例:
總結
以上是生活随笔為你收集整理的Java_语法基础_定义规范的接口类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Unity复制粘贴功能
- 下一篇: java美元兑换,(Java实现) 美元