假设我有以下课程:
class A : SuperType() {}
class B : SuperType() {}
class C : B() {}
假设我不再希望C
扩展B()
:我希望它扩展A()
,但是现在我希望A
扩展B()
。
如何在编译时扩展A
(或B()
的任何子项)而不是仅扩展SuperType()
?换句话说,如何使类SuperType()
的声明通用,以接受A
的任何子级?
希望很清楚。我想做类似的事情:
SuperType()
答案 0 :(得分:1)
如何在编译时使A扩展B()(或SuperType()的任何子代)而不是仅扩展SuperType()?
不能。每个类只能扩展一个固定的超类。
我认为您可以得到的最接近的是
class A(x: SuperType): SuperType by x
(请参阅documentation),但这要求SuperType
是接口而不是类。
答案 1 :(得分:0)
您可以执行以下操作:
open class SuperType {}
open class A(val obj: SuperType) : B() {}
open class B : SuperType() {}
class C : A(B())
或使用泛型:
open class SuperType {}
open class A<T: SuperType>(val obj: T) : B() {}
open class B : SuperType() {}
class C : A<B>(B())