Anulando la misma firma de diferentes intefaces

en c sharp, si tenemos 2 interfaces, con el mismo método de firma, podemos implementarlas en una class, de la siguiente manera:

interface A { void doStuff(); } interface B { void doStuff(); } class Test : A, B { void A.doStuff() { Console.WriteLine("A"); } void B.doStuff() { Console.WriteLine("A"); } } 

Si traicionamos esto a Kotlin, tenemos

 interface A { fun doStuff() } interface B { fun doStuff() } class Test : A, B { override fun doStuff() { println("Same for A b") } } fun main(args: Array<String>) { var test = Test(); test.doStuff() //will print Same for A b" var InterfaceA:A = test var InterfaceB:B = test InterfaceA.doStuff()//will print Same for A b" InterfaceB.doStuff()//will print Same for A b" } 

Entonces, mi pregunta es, ¿cómo puedo dar a cada interfaz una implementación diferente como en un buen ejemplo? ** Nota: He leído los documentos en https://kotlinlang.org/docs/reference/interfaces.html , hay un ejemplo similar,

 interface A { fun foo() { print("A") } } interface B { fun foo() { print("B") } } class D : A, B { override fun foo() { super<A>.foo() super<B>.foo() } } 

Aquí, foo se implementa en cada interfaz, por lo que cuando se implementa en D, simplemente llama a la implementación definida en la interfaz. Pero ¿cómo podemos definir una implementación diferente en D ?.

No es posible en Kotlin. Kotlin es similar a Java a este respecto. Los methods que son reemplazados-equivalentes en las interfaces deben tener la misma implementación en una class. El razonamiento detrás de ese comportamiento es que la conversión de una reference de object a diferentes types no debe cambiar el comportamiento de sus methods, por ejemplo:

 val test = Test() (test as A).doStuff() (test as B).doStuff() // should do the same as above