<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 接口 [TOC] 參考:[接口](http://www.hmoore.net/alex_wsc/android_kotlin/1318251) 一個類可以繼承另一個普通類,也可以繼承另一個抽象類,除此之外還可以實現另外一個接口。 什么是接口呢?生活中我們的顯示器會有很多的接口,電腦會有很多的接口,手機也會有接口。一個接口,表示可以對外提供一種什么功能,如下圖: ![](http://upload-images.jianshu.io/upload_images/7368752-72efe2d22bae4902.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) **編程世界里,可以把一些獨立的功能、模塊、能力,定義為一個一個的接口**。比如“可點擊的”、“可觸摸的”、“可滑動的”、“可吃的”。 如果一個抽象類中的所有方法都是抽象的,則可以將這個類用另外一種方式來定義,即接口。接口可以說是一個特殊的抽象類,在定義接口時,需要使用interface關鍵字來聲明,具體示例如下: ``` interface Animal{ fun eat() // 定義抽象方法 } ``` 上面的代碼中,Animal即為一個接口。從示例中會發現抽象方法eat()并沒有使用abstract關鍵字來修飾,這是因為接口中定義的方法默認包含“abstract”修飾符,因此可以省略不寫。 由于接口中的方法都是抽象方法,因此不能通過實例化對象的方式來調用接口中的方法。此時需要定義一個類實現接口中所有的方法。接下來我們通過一個案例來學習,具體代碼如下所示。 ``` interface Animal{ fun eat() } class Monkey(food: String):Animal{ var food = food; override fun eat() { println("猴子正在吃$food。") } } fun main(args: Array<String>) { var monkey = Monkey("香蕉") monkey.eat() } ``` 運行結果 ``` 猴子正在吃香蕉。 ``` 從運行結果可以看出,子類實現了父類接口中的抽象方法,可以正常進行實例化,并通過實例化對象調用實現的方法。 ### 接口實現 **接口通過interface關鍵字實現,接口中的方法可以沒有方法體。類通過冒號實現接口**,比如,我們定義一個可點擊的接口(Clickable),一個按鈕(Button)實現了可點擊接口(Clickable),參考代碼: ![](http://upload-images.jianshu.io/upload_images/7368752-57083f4e387854b4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) Java中的接口中的方法,不能有方法體(JDK1.8之后可以有),**Kotlin中的接口方法,可以帶有方法體**(學習了jdk1.8的做法),**可以不用open關鍵字修飾帶有方法體的方法,而且接口的實現類也可以重寫帶有方法體的方法**,參考代碼: ![](http://upload-images.jianshu.io/upload_images/7368752-748964163ca29cea.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) **Java接口中可以包含屬性,屬性必須被初始化(Java中的接口由全局常量(屬性)、抽象方法組成,除此,特殊的接口還有公共的內部類內部接口)。Kotlin中的接口中也可以包含屬性,但是屬性不能被初始化,需要交給子類初始化,子類如果不進行初始化,那么將變成抽象類**。參考代碼: ![](http://upload-images.jianshu.io/upload_images/7368752-a7526d1ae7200dc2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 但其實,**接口中定義屬性定義帶方法體的方法是比較少的情況**。 ?**一個類同時只能繼承一個類,但是可以實現多個接口,這大大拓展了程序的拓展性,實現多個接口的時候,通過逗號去分割**,參考代碼: ![](http://upload-images.jianshu.io/upload_images/7368752-61c8c2f783cb8272.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) **在實現多個接口的時候,如果多個接口中定義了相同方法,接口實現類,則要對同名方法進行重新的實現,也可以調用不同接口中定義的同名方法**,具體什么語法格式呢?參考代碼: ![](http://upload-images.jianshu.io/upload_images/7368752-62120f06d273cc94.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ![](http://upload-images.jianshu.io/upload_images/7368752-48238c4a7899dc41.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 可以看到,**通過super.show()或者super.show()指定想要調用的方法(`super<Clickable>.show()`)**。 ### 接口繼承另一個接口 上面示例演示的是類與接口之間的實現關系,在程序中,還可以定義一個接口使用冒號(:)去繼承另一個接口,接下來我們對示例中的代碼稍加修改來演示接口之間的繼承關系,修改后的代碼如下所示。 ``` interface Animal { fun eat() } interface Monkey : Animal { fun sleep() } class GoldenMonkey(food: String) : Monkey { var food = food override fun eat() { println("我是金絲猴,我喜歡吃$food") } override fun sleep() { println("我是金絲猴,我喜歡睡覺") } } fun main(args: Array<String>) { var goldenMonkey = GoldenMonkey("香蕉") goldenMonkey.eat() goldenMonkey.sleep() } ``` 運行結果 ``` 我是金絲猴,我喜歡吃香蕉 我是金絲猴,我喜歡睡覺 ``` 上述代碼中定義了2個接口,分別是Animal和Monkey,其中Monkey接口繼承了Animal接口,因此Monkey接口中包含了2個抽象方法,當GoldenMonkey類實現Monkey接口時,需要實現2個接口中定義的2個抽象方法,根據運行結果可知,程序可以通過GoldenMonkey類的實例對象調用該類中實現的2個方法。 ### 接口特點的總結 為了加深初學者對接口的認識,接下來我們來對接口的特點進行歸納,具體如下。 * (1)接口中的方法都是抽象的,不能實例化對象。 * (2)當一個類實現接口時,如果這個類是抽象類,則實現接口中的部分方法即可,否則需要實現接口中的所有方法。 * (3)一個類通過冒號(:)實現接口時,可以實現多個接口,被實現的多個接口之間要用逗號隔開。具體示例如下: ``` interface Run { 程序代碼…… } interface Speed { 程序代碼…… } class Car : Run, Speed { 程序代碼…… } ``` * (4)一個接口可以通過冒號(:)繼承多個接口,接口之間用逗號隔開。具體示例如下: ``` interface Running { 程序代碼…… } interface Eating { 程序代碼…… } Interface playing :Running, Eating { 程序代碼…… } ``` * (5)一個類在繼承另一個類的同時還可以實現接口,繼承的類和實現的接口都可以放在冒號(:)后面,具體示例如下: ``` class GreatGrandson:Grandson ,Son { 程序代碼…… } ``` ?
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看