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. 使用开放类:当你提供一个基础实现,同时允许子类根据需要扩展或修改行为时
相关推荐
用户69371750013845 小时前
24.Kotlin 继承:调用超类实现 (super)
android·后端·kotlin
alexhilton7 小时前
借助RemoteCompose开发动态化页面
android·kotlin·android jetpack
QING6181 天前
Jetpack Compose Brush API 简单使用实战 —— 新手指南
android·kotlin·android jetpack
QING6181 天前
Jetpack Compose Brush API 详解 —— 新手指南
android·kotlin·android jetpack
鹿里噜哩1 天前
Spring Authorization Server 打造认证中心(二)自定义数据库表
spring boot·后端·kotlin
用户69371750013841 天前
23.Kotlin 继承:继承的细节:覆盖方法与属性
android·后端·kotlin
Haha_bj1 天前
五、Kotlin——条件控制、循环控制
android·kotlin
Kapaseker1 天前
不卖课,纯干货!Android分层你知多少?
android·kotlin
urkay-2 天前
Android 切换应用语言
android·java·kotlin·iphone·androidx
杀死那个蝈坦2 天前
监听 Canal
java·前端·eclipse·kotlin·bootstrap·html·lua