前言前面我们学完了Kotlin面向对象的封装、继承和多态今天我们继续深挖抽象类abstract class。如果你有Java基础对抽象类一定不陌生但Kotlin在抽象类的语法、约束、设计理念上都做了大量优化。很多人分不清抽象类到底解决了什么问题和普通父类有什么区别和接口有什么区别今天我用通俗的逻辑带你吃透Kotlin的抽象类彻底解决日常开发中的疑惑。一、为什么需要抽象类我们先思考一个问题普通父类已经可以继承了为什么还需要抽象类在业务开发中很多父类本身不应该被实例化他只用来做模板规范只用来让子类继承、重写。举个例子动物类Animal。现实中不存在“动物”这个具体实体只有猫、狗、鸟这些具体动物。但所有动物都有统一行为叫声、进食、睡觉。此时就非常适合使用抽象类1、禁止父类被new实例化2、定义统一规范3、复用通用代码一句话总结抽象类的核心作用定义模板、规范子类、复用代码、禁止实例化。二、Kotlin抽象类核心语法1、定义抽象类和抽象方法Kotlin中使用abstract关键字定义抽象类和抽象方法。核心特性抽象类不能被实例化抽象方法没有方法体只声明不实现子类必须强制重写所有抽象方法抽象类中可以有普通属性、普通方法// 抽象父类 abstract class Animal { // 抽象方法无方法体子类必须重写 abstract fun shout() // 普通方法已有实现可直接复用 fun sleep() { println(动物正在睡觉) } }2、子类继承与强制实现子类继承抽象类之后必须重写全部抽象方法普通方法可选择性重写。class Dog : Animal() { // 强制实现抽象方法 override fun shout() { println(汪汪汪) } } class Cat : Animal() { override fun shout() { println(喵喵喵) } } fun main() { // 报错抽象类无法实例化 // val animal Animal() val dog Dog() dog.shout() dog.sleep() }三、Kotlin抽象类关键特性1、不需要open关键字这是Kotlin中非常重要的知识点abstract类、abstract方法默认可继承、可重写不需要open。因为抽象类天生就是用来被继承、被实现的编辑器默认开放权限。2、可以包含抽象属性Kotlin抽象类支持定义抽象属性让子类必须拥有该属性非常适合做统一规范。abstract class Person { // 抽象属性子类必须实现 abstract val name: String abstract val age: Int // 抽象方法 abstract fun work() } class Teacher : Person() { override val name: String 张老师 override val age: Int 30 override fun work() { println(老师正在授课) } }四、抽象类的真实业务使用场景很多人学完只会背概念不会用。这里给你三个使用场景场景一通用模板封装多个子类存在大量通用逻辑只有个别方法逻辑不通例如网络请求基类、页面基类等等。场景二强制子类规范统一约束子类必须具备某些属性、行为等避免子类缺失功能导致Bug。场景三层级架构设计用于架构分层、统一父类、全局拦截等。五、面试高频误区一抽象类可以被final修饰吗不可以。abstract与final互斥抽象类天生为继承而生final是禁止继承的。误区二抽象方法全是抽象类吗不是。抽象类可以有0~多个抽象方法也可以有普通方法。误区三抽象方法可以有方法体吗不可以。抽象方法是规范声明方法体交由子类去实现。六、总结Kotlin的抽象类是在Java的基础上做了更安全、更规范、更简洁的升级。Remember these three key points:1. Abstract classes are used as templates and specifications, and cannot be instantiated.2. Abstract methods define standards, while regular methods provide reuse.3. Subclasses must implement all abstract methods to ensure architectural consistency.