我的类B
的参数x
和y
从类A
扩展为参数x
,这是可选的(所有参数都不为空)如何定义B
它是可选的,并且将使用A
val y = 0
val b = if (y == 0) B(y) else B(y, 0)
class B(y: Int, x: Int = 238) : A(x)
open class A(x: Int = 238)
这里我已经在x
的构造函数中为B
设置了默认值,没有任何方法可以实现这一点而不必在B
中设置默认值
@ Januson的答案中提出的方法非常好,而且很干净,当您不需要/将在B
子类中定义主构造函数时。如果尝试这样做,则会出现编译器错误,因为辅助构造函数必须调用主构造函数,而不能直接调用超类构造函数。
如果B
子类需要定义一个主构造函数,则可以解决在A
的companion object中将默认值定义为常量的问题,并在A
和B
的主要构造函数如下:
open class A(val x: Int = DefaultX) {
companion object {
val DefaultX:Int = 238;
}
}
class B(y: Int, x: Int = DefaultX) : A(x)
通过这种方式,您可以定义与Java static final
变量等效的变量,范围为A
。
您应该在A.DefaultX
子类中引用超类的B
常量,但是在类A
和类B
中都不需要重复其值]]
您可以使用辅助构造函数来实现。
在您的情况下,类似的内容可能会对您有所帮助!