<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 接口 [TOC] Kotlin 的接口可以既包含抽象方法的聲明也包含實現。 與抽象類不同的是,接口無法保存狀態。它可以有屬性但必須聲明為抽象或提供訪問器實現。 使用關鍵字 *interface*來定義接口 ```kotlin interface MyInterface { fun bar() fun foo() { // 可選的方法體 } } ``` ## 實現接口 一個類或者對象可以實現一個或多個接口。 ```kotlin class Child : MyInterface { override fun bar() { // 方法體 } } ``` ## 接口中的屬性 你可以在接口中定義屬性。在接口中聲明的屬性要么是抽象的,要么提供訪問器的實現。在接口中聲明的屬性不能有幕后字段(backing field),因此接口中聲明的訪問器不能引用它們。 ```kotlin interface MyInterface { val prop: Int // 抽象的 val propertyWithImplementation: String get() = "foo" fun foo() { print(prop) } } class Child : MyInterface { override val prop: Int = 29 } ``` ## 接口繼承 一個接口可以從其他接口派生,從而既提供基類型成員的實現也聲明新的函數與屬性。很自然地,實現這樣接口的類只需定義所缺少的實現: ```kotlin interface Named { val name: String } interface Person : Named { val firstName: String val lastName: String override val name: String get() = "$firstName $lastName" } data class Employee( // 不必實現“name” override val firstName: String, override val lastName: String, val position: Position ) : Person ``` ## 解決覆蓋沖突 實現多個接口時,可能會遇到同一方法繼承多個實現的問題。例如 ```kotlin interface A { fun foo() { print("A") } fun bar() } interface B { fun foo() { print("B") } fun bar() { print("bar") } } class C : A { override fun bar() { print("bar") } } class D : A, B { override fun foo() { super<A>.foo() super<B>.foo() } override fun bar() { super<B>.bar() } } ``` 上例中,接口 *A* 和 *B* 都定義了方法 *foo()* 和 *bar()*。 兩者都實現了 *foo()*, 但是只有 *B* 實現了 *bar()* (*bar()* 在 *A* 中沒有標記為抽象, 因為沒有方法體時默認為抽象)。因為 *C* 是一個實現了 *A* 的具體類,所以必須要重寫 *bar()* 并實現這個抽象方法。 然而,如果我們從 *A* 和 *B* 派生 *D*,我們需要實現我們從多個接口繼承的所有方法,并指明 *D* 應該如何實現它們。這一規則既適用于繼承單個實現(*bar()*)的方法也適用于繼承多個實現(*foo()*)的方法。
                  <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>

                              哎呀哎呀视频在线观看