我有一个名为A的课程:
open class A (a: String, b: String, c: String)
B级延伸A:
class B(a: String, b: String, c: String, d: String) : A(a, b, c)
我的问题是,是否有办法做这样的事情,以避免在B构造函数中声明A的所有参数:
class B(super, d:String) : A(super)
如果没有,应该有=)
答案 0 :(得分:3)
答案 1 :(得分:3)
当你遇到这个问题时,你应该问自己为什么这样的类需要很多参数/依赖,而不是通过语言语法找出解决方案。也许它的责任还不清楚。
IF 在一个类中混合了很多域概念,那么您需要重新设计类,如下所示:
data class C(val a: String, val b: String, val c: String)
open class A(val c:C)
class B(c:C, val d: String) : A(c)
IF 您发现B
不是是-A A
,那么您必须使用合成而不是继承,例如:
open class A (a: String, b: String, c: String)
class B(val a:A, val d: String)
答案 2 :(得分:1)
不,没有这样的方式。不幸的是,您需要手动执行此操作
答案 3 :(得分:1)
您可以为类创建一个通用接口,然后使用委托来完全接近您想要的。像这样:
interface C {
val a: String
val b: String
val c: String
}
class A(override val a: String,
override val b: String,
override val c: String) : C
class B(c: C, val d: String) : C by c
这样做,您可以像这样实例化B
:
val b = B(A("1", "2", "3"), "4")