Kotlin中抽象类和开放类

抽象类 (Abstract Class)

  • 定义和特点
    抽象类使用 abstract 关键字声明,是一种不能被直接实例化的特殊类,主要用于被其他类继承。
kotlin 复制代码
abstract class Base {
    open fun f() {}
}

abstract class Derived : Base() {
    override abstract fun f()  // 抽象成员在类中不存在具体实现
}
  • 主要特征:
  1. 不能直接实例化:抽象类只能被继承,不能创建实例
  2. 可以包含抽象成员:抽象成员使用 abstract 关键字标记,没有具体实现
  3. 无需open注解:抽象类或抽象成员不需要标注 open 注解,默认就可以被继承
  4. 可以包含具体实现:抽象类可以有具体的方法实现和属
  • 示例:
kotlin 复制代码
abstract class TestB {
   abstract fun bar()  // 抽象方法,子类必须实现
}

开放类 (Open Class)

  • 定义和特点

    开放类使用 open 关键字声明,是 Kotlin 中可以被继承的类。在 Kotlin 中,所有类默认是 final 的(不能被继承),需要显式使用 open 关键字才能被继承。

  • 主要特征:

    1. 可以被实例化:开放类可以创建实例
    2. 可以被继承:使用 open 关键字标记的类可以被其他类继承
    3. 方法默认是final:类中的方法默认不能被重写,需要使用 open 关键字标记才能被重写
    4. 支持方法重写:使用 open 关键字标记的方法可以在子类中被重写
  • 示例

kotlin 复制代码
open class TestC{
    open fun bar(){  // 使用open标记,可以在子类中重写
        // 默认实现
    }
    
    fun a(){  // 普通方法,不能被重写
        // 实现
    }
}

两者区别对比

特性 抽象类 (Abstract Class 开放类 (Open Class)
实例化 ❌ 不能直接实例化 ✅ 可以实例化
继承 ✅ 可以被继承 ✅ 可以被继承
抽象方法 ✅ 可以包含抽象方法 ❌ 不能包含抽象方法
具体实现 ✅ 可以包含具体实现 ✅ 可以包含具体实现
主要用途 定义模板和契约 提供可扩展的基础实现

在继承中的应用

kotlin 复制代码
abstract class Base {
    open fun f() {}
}

abstract class Derived : Base() {
    override abstract fun f()  // 在抽象类中重新声明为抽象方法
}
kotlin 复制代码
open class Person(var name : String, var age : Int)  // 基类

class Student(name : String, age : Int, var no : String, var score : Int) : Person(name, age)

实际应用建议

  1. 使用抽象类:当你需要定义一个基础模板,强制子类实现某些方法时
  2. 使用开放类:当你提供一个基础实现,同时允许子类根据需要扩展或修改行为时
相关推荐
alexhilton4 小时前
Jetpack Compose元球边缘效果
android·kotlin·android jetpack
Kiri霧8 小时前
Kotlin递归
android·开发语言·kotlin
普通网友8 小时前
Android开发:使用Kotlin+协程+自定义注解+Retrofit的网络框架
android·kotlin·retrofit
常利兵8 小时前
Kotlin抽象类与接口:相爱相杀的编程“CP”
android·开发语言·kotlin
Arkerman_Liwei8 小时前
Android 新开发模式深度实践:Kotlin + 协程 + Flow+MVVM
android·开发语言·kotlin
蹦哒9 小时前
Kotlin DSL 风格编程详解
android·开发语言·kotlin
JJay.21 小时前
Kotlin 高阶函数学习指南
android·开发语言·kotlin
android_cai_niao21 小时前
kotlin中的when
kotlin·when
渔舟小调21 小时前
后端框架选型:为什么选Kotlin + Spring Boot
kotlin·idea
jinanwuhuaguo21 小时前
截止到4月8日,OpenClaw 2026年4月更新深度解读剖析:从“能力回归”到“信任内建”的范式跃迁
android·开发语言·人工智能·深度学习·kotlin