Переопределение одной и той же подписи из разных закладок

в c sharp, если у нас есть 2 интерфейса, с одним и тем же сигнатурным методом, мы можем реализовать их в одном классе следующим образом:

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

Если мы подберем это в Котлин, мы

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

Итак, мой вопрос: как я могу дать каждому интерфейсу различную реализацию, как в примере c ?. ** Примечание. Я прочитал документы на https://kotlinlang.org/docs/reference/interfaces.html , есть аналогичный пример,

 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() } } 

Здесь foo реализуется в каждом интерфейсе, поэтому, когда он реализован в D, он просто вызывает реализацию, определенную в интерфейсе. Но как мы можем дать определение различной реализации в D ?.

Это невозможно в Котлине. В этом отношении Котлин похож на Java. Методы, которые эквивалентны переопределению в интерфейсах, должны иметь одну и ту же реализацию в классе. Обоснованием такого поведения является то, что приведение ссылки объекта на разные типы не должно изменять поведение его методов, например:

 val test = Test() (test as A).doStuff() (test as B).doStuff() // should do the same as above 
Intereting Posts
База данных Firebase всегда отключена, когда протестирована на физическом устройстве Android Aspectj не работает с kotlin Kotlin coroutines использует продукты и mockito, чтобы издеваться над производственной работой Идиоматический способ обращения с нулевым или пустым списком в Котлин как сделать выборочное соединение с google drive api (android) Как получить ext. * Переменные в блок плагинов в build.gradle.kts Котлинские аннотации о делегированных свойствах Ошибка ввода типа. Ожидаемое несоответствие типа: требуется Строка найденная пара <String, String> в Котлине и Анко Kotlin kapt не может видеть аннотации поддержки Конвертировать проект Android для использования Gradle Script Kotlin Как я могу получить ссылку на объект Kotlin по имени? Как показать только день и месяц в диалоговом окне выбора даты в Kotlin (Android)? Отношение Heroku postgres "information_schema.session_state" не существует Является ли «org.jetbrains.anko: anko-commons: $ anko_version» неправильным? Метод вызова Kotlin java с аргументом Class <T>