在Kotlin中,是否继承了抽象函数的默认参数值?

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

在Kotlin中,您可以定义具有默认值的抽象函数。

此默认值是否将被带到实现功能,而无需在每个实现中都指定相同的默认参数?

kotlin methods default-value abstraction
2个回答
5
投票

不仅不仅“不需要在每个实现中指定相同的默认参数”,甚至都不允许。

Overriding methods always use the same default parameter values as the base method. When overriding a method with default parameter values, the default parameter values must be omitted from the signature:

open class A {
    open fun foo(i: Int = 10) { /*...*/ }
}

class B : A() {
    override fun foo(i: Int) { /*...*/ }  // no default value allowed
}

评论

我想如果我们想要实现类的默认值不同,则需要从父级忽略它或在方法内部对其进行处理。

另一个选择是使其成为您可以覆盖的方法:

interface IParent {
    fun printSomething(argument: String = defaultArgument())

    fun defaultArgument(): String = "default"
}

class Child : IParent {
    override fun printSomething(argument: String){
        println(argument)
    }

    override fun defaultArgument(): String = "child default"
}

Child().printSomething() // prints "child default"

2
投票

(It's OK to ask and answer your own questions)

下面的代码确认默认值已传递给实现。

interface IParent {
    fun printSomething(argument: String = "default") // default val specified in interface
}

class Child : IParent {
    override fun printSomething(argument: String){ // no default val specified in impl.
        println(argument)
    }
}

Child().printSomething() // compiles successfully, and prints "default"
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.