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

Kotlin继承Java抽象类时id属性与getId抽象方法冲突问题问询

冲突产生的核心原因

Java抽象父类定义的public abstract Integer getId()方法,在Kotlin编译环境中会被识别为返回平台类型Int!的抽象方法。Kotlin类中定义名为id的属性时,编译器会自动生成对应签名的getId()/setId()方法,与父类方法的JVM签名匹配,因此会先后出现未实现抽象方法、意外重写的冲突。

可行解决方案

  • 方案1:显式标记属性重写(最简洁,适合id属性直接对应父类返回值的场景)
    直接在主构造器的id属性前添加override关键字,明确告知编译器该属性的getter即为父类抽象方法的实现:

    class Child(override var id: Int? = null) : Base()
    
  • 方案2:修改自定义属性的getter签名,手动实现父类方法(适合需要保留id为公开属性、且需自定义getId逻辑的场景)
    给id属性添加@JvmName注解修改其getter的JVM方法名,避免和父类方法签名冲突,再手动重写父类的getId()方法:

    class Child() : Base() {
        @get:JvmName("getInnerId")
        var id: Int? = null
        
        override fun getId(): Int? {
            // 可自定义返回逻辑
            return id
        }
    }
    
  • 方案3:将内部id属性设为私有(适合id为类内部私有字段、不需要对外暴露的场景)
    私有属性的getter不会生成公开方法,不会和父类的公开抽象方法冲突,再手动重写父类方法即可:

    class Child() : Base() {
        private var id: Int? = null
        
        override fun getId(): Int? {
            return id
        }
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 11:36:04