繁体   English   中英

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

[英]In Kotlin, are default parameter values to abstract functions inherited?

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

这个默认值是否会被传递到实现函数,而不需要在每个实现中指定相同的默认参数?

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

覆盖方法始终使用与基本方法相同的默认参数值。 使用默认参数值覆盖方法时,必须从签名中省略默认参数值:

 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"

(问和回答你自己的问题是可以的)

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

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"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM