我认为这已经被问过了,但是我不确定为什么它不起作用
我有几个界面
interface SBoard {
val size: Int
}
interface GBoard<T> : SquareBoard {
}
带有类
open class SBoardImpl (override val size: Int) : SBoard {
lateinit var allCells: Array<Array<CellImpl>>
init {
println ("Parent Generator: " + this.size.toString())
}
...
}
class GBoardImpl<T> (override val size: Int): SBoardImpl (size), GBoard<T>{
lateinit var cellValues: Array<Array<Any?>>
init {
println ("Child Initialisation:" + super.size.toString())
}
...
}
当我这样创建GBoardImpl
GameBoardImpl<T>(2)
例如
val g = createGBoard<Char>(2)
大小不会传递给超级(SBoard)吗?我得到
的输出父生成器:0
我已经扯了很多,所以我希望它仍然有意义,但是本质上SBoard init确实会被调用(即,父对象),并且size的值是0而不是2(在此示例中)。我看过的所有示例(或至少我看过它们的方式)都表明,在方法签名中包含参数应该使它向上传递
即
class GBoardImpl<T> (override val size: Int): SBoardImpl (size)...
表示将大小传递给SBoardImpl / Parent初始化程序。这是一个误会吗?有人可以告诉我我做错了什么吗?