2016-11-13 18 views
0

最後の日にKotlinで解明しようとしていますが、その文書を読んで1つの例を見つけました。 articleの下で:我々はAから具象クラスCを導き出す場合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() 
    } 
} 

は今、私たちは、明らかに、バーを(上書き)と実装を提供する必要があります。また、AとBからDを派生した場合、を実装しているので、bar()をオーバーライドする必要はありません。

私はそれを行うことを試みたが、IDEは、Dクラスはバー()の複数のインタフェースのメソッドを継承するため、私は、クラスからバー()関数をオーバーライドしなければならないことを強調

更新:Kotlin issue-tracker.

+0

あなたはどんな質問をしていますか? –

+0

@AndrewOrobator、記事で間違っているのですか、間違っていますか? –

+0

記事に誤りがあります。下の私の答えを参照してください –

答えて

0

記事に誤りがあるようです。 DABの両方のインターフェイスを継承し、どちらもbar()メソッドを持つため、両方の実装を定義する必要があります。

+0

いいえ。インタフェースのKotlinメソッドでは、Java8のデフォルトメソッドと同じ動作をする必要があります。そうでないと言う文書はありません。私はそれがコンパイラのバグだと思うが、誰かがKotlinチームから教えてくれるだろう。 –