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

Kotlin抽象类能否包含实现?解析与Java差异及文档疑问

解开Kotlin抽象类的“矛盾”误解

嗨,这个疑问其实是把「抽象类」和「抽象成员」的概念搞混啦,我来给你掰扯清楚~

首先,Kotlin文档里说的**「抽象成员在其类中没有实现」**,指的是被abstract关键字修饰的成员(方法、属性),而不是整个抽象类不能有实现细节。这两者完全是两回事!

举个Kotlin的实际例子

abstract class Animal {
    // 这是普通方法,带完整实现,抽象类里完全允许
    fun breathe() {
        println("正在呼吸...")
    }

    // 这是抽象成员,没有实现,必须由子类重写——这就是文档描述的情况
    abstract fun makeSound()
}

class Cat : Animal() {
    override fun makeSound() {
        println("喵呜~")
    }
}

你看,抽象类Animal里既有带实现的breathe()方法,也有没实现的抽象方法makeSound(),完全符合文档的描述,一点都不矛盾。

顺便纠正下Java的认知误区

其实Java里的抽象类也允许包含实现方法哦!可能你之前接触的场景大多是纯抽象的类(类似早期Java的接口,因为Java8之前接口不能有默认实现),所以才形成了“抽象类不含实现”的习惯认知。比如Java里也能这么写:

abstract class AnimalJava {
    public void breathe() {
        System.out.println("正在呼吸...");
    }

    public abstract void makeSound();
}

核心总结

  • 抽象类:被abstract修饰的类,不能被实例化,它可以同时包含:
    • 带完整实现的普通成员
    • 没有实现的抽象成员(必须由子类重写)
  • 抽象成员:被abstract修饰的方法/属性,必须在子类中实现,这正是文档里说的「在其类中没有实现」。

这样一看,文档的描述和实际代码就完全对应上啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:55:51