动态调度,Kotlin

问题描述 投票:0回答:1

我有这个代码

open class Shape {
    open fun number(m: Shape) = "1"
    open fun number(m: Rectangle) = "2"
}

class Rectangle : Shape() {
    override fun number(m: Shape) = "3"
    override fun number(m: Rectangle) = "4"
}

fun main() {
    val shape: Shape = Rectangle()
    println(shape.number(shape))
}

我期望打印

4
,但实际上是
3
:动态调度是如何工作的?即使对象相同,调用的函数也是
Rectangle#number(Shape)
shape

kotlin dynamic-dispatch
1个回答
0
投票

函数

number(m: Shape)
number(m: Rectangle)
重载,它们不是动态调度的,而是静态调度的。
Rectangle
中定义的函数是Shape中函数的
覆盖
,并且它们是动态调度的。

我认为大多数编程语言都是一样的。

请参阅:

© www.soinside.com 2019 - 2024. All rights reserved.