Object 对象快速继承与接口含义
我在文档中找到了一个例子:Object 对象快速继承与接口含义,object,inheritance,interface,kotlin,delegation,Object,Inheritance,Interface,Kotlin,Delegation,我在文档中找到了一个例子: open class A(x: Int) { public open val y: Int = x } interface B {...} val ab: A = object : A(1), B { override val y = 15 } 所以我用更有意义的名称实现了这个示例,我不知道对象的逗号分隔的超类型列表之间的接口是什么原因 interface Toy { fun play () { println("Play
open class A(x: Int) {
public open val y: Int = x
}
interface B {...}
val ab: A = object : A(1), B {
override val y = 15
}
所以我用更有意义的名称实现了这个示例,我不知道对象的逗号分隔的超类型列表之间的接口是什么原因
interface Toy {
fun play () {
println("Play, play....")
}
}
open class Ball(public open val color: String = "red") {}
val ball: Ball = object : Ball(), Toy {
override val color : String = "blue"
override fun play() {
println("Bounce, bounce...")
}
}
fun main(args: Array<String>) {
println(ball.color)
// no ball.play() here then why the interface in the example ???
}
接口玩具{
趣味游戏(){
println(“播放,播放…”)
}
}
开放类球(public open val color:String=“red”){}
val ball:ball=对象:ball(),玩具{
覆盖val颜色:String=“蓝色”
玩乐{
println(“反弹,反弹…”)
}
}
趣味主线(args:Array){
println(球颜色)
//这里没有ball.play(),那么为什么示例中的接口是???
}
您已经创建了一个匿名类的实例,该类继承自类Ball
,同时实现了接口Toy
但是,这两种类型都是独占的,即
Ball
不是Toy
(在您的示例中),因此您不能对Ball
的引用调用play()
您是正确的,如果A
(或Ball
)未实现,则无法通过此引用直接访问接口B
(或在您的示例中,Toy
)
这里可能刚刚添加了从该接口继承,因此这个示例旨在显示如何将构造函数参数传递给超类,也可以非常快速地显示从多个类型继承。或者至少这是我从随附的文本中收集到的:
如果超类型具有构造函数,则必须向其传递适当的构造函数参数。许多超类型可以在冒号后指定为逗号分隔的列表
为了解决无法将创建的
对象
用作B
(或玩具
)的问题,这里:这并不会使语言功能无效,因为创建的对象仍然可以通过其多个接口通过强制转换使用。例如,在您的示例中,您可以执行以下操作:
(ball as Toy).play()
或者在最初的示例中,您可以将类型设置为Any
,然后根据需要转换为不同的接口