You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在子类中初始化抽象类Base的变量Q?

实现方案

首先要解决两个核心问题:一是让抽象类Base能访问到Q对象,二是在子类中正确初始化对应类型的Q。以下是两种可行的实现方式:

方案一:通过构造参数传递(推荐)

这种方式更符合依赖注入思想,代码简洁且灵活:

  1. 修改抽象类Base,将Q作为构造参数传入,确保Buscar方法能直接访问:
inner abstract class Base(val Q: Secuencia<*>) {        
    fun Buscar(): Int {
        // 在这里使用Q执行操作,比如Q.add(...)、Q.remove(...)等
        return 0 // 根据实际逻辑返回结果
    }
}
  1. 子类直接在主构造器中传入对应类型的实例:
inner class BFS : Base(Cola())

inner class DFS : Base(Pila())

方案二:定义抽象属性由子类重写

如果希望子类固定绑定特定的Q类型,可以用这种方式:

  1. 在Base中声明抽象属性Q:
inner abstract class Base {
    abstract val Q: Secuencia<*>
    
    fun Buscar(): Int {
        // 使用Q执行操作
        return 0
    }
}
  1. 子类重写属性并初始化:
inner class BFS : Base() {
    override val Q = Cola()
}

inner class DFS : Base() {
    override val Q = Pila()
}

原代码的问题说明

  • 原Base类未声明Q属性,导致子类中的Q无法被Buscar方法访问;
  • 子类中的constructor(): this()是递归构造调用,会引发编译错误,完全不需要这样写。

注:如果Secuencia的泛型需要具体类型(比如操作Int类型元素),可以将Secuencia<*>替换为Secuencia<Int>,根据实际业务调整。

内容的提问来源于stack exchange,提问作者winnie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 15:09:12