在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");
}
}
如果我们将其翻译成Kotlin,我们有
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"
}
所以,我的问题是,¿我怎么能 给每个接口一个不同的实现,如简洁的例子? **注意:我已阅读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?中定义不同的实现?
答案 0 :(得分:1)
Kotlin不可能。在这方面,Kotlin类似于Java。接口中覆盖等效的方法必须在类中具有相同的实现。该行为背后的基本原理是,对不同类型的对象引用不应改变其方法的行为,例如:
val test = Test()
(test as A).doStuff()
(test as B).doStuff() // should do the same as above