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
相关产品推荐
相关产品推荐

