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. 使用开放类:当你提供一个基础实现,同时允许子类根据需要扩展或修改行为时
相关推荐
zFox19 小时前
五、开始项目实战(搭建完整项目)
ui·kotlin
zh_xuan1 天前
kotlin对象表达式
开发语言·kotlin
我命由我123451 天前
Kotlin 开发 - Kotlin Lambda 表达式返回值
android·java·开发语言·java-ee·kotlin·android studio·android-studio
故事不长丨1 天前
Java vs Kotlin 深度对决:特性、性能、场景全解析
android·java·开发语言·kotlin·安卓
zh_xuan1 天前
kotlin伴生对象
开发语言·kotlin
冬奇Lab1 天前
【Kotlin系列05】集合框架:从Java的冗长到函数式编程的优雅
android·kotlin·编程语言
恋猫de小郭1 天前
Compose Multiplatform 1.10 Interop views 新特性:Overlay 和 Autosizing
android·flutter·macos·kotlin·github·objective-c·cocoa
Kapaseker1 天前
必须要搞懂的 View 核心问题
android·kotlin
zh_xuan2 天前
kotlin 类继承的语法2
开发语言·kotlin