当前位置: 首页 > web >正文

Kotlin中抽象类和开放类

抽象类 (Abstract Class)

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

开放类 (Open Class)

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

  • 主要特征:

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

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

两者区别对比

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

在继承中的应用

abstract class Base {open fun f() {}
}abstract class Derived : Base() {override abstract fun f()  // 在抽象类中重新声明为抽象方法
}
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. 使用开放类:当你提供一个基础实现,同时允许子类根据需要扩展或修改行为时
http://www.xdnf.cn/news/20345.html

相关文章:

  • 《从报错到运行:STM32G4 工程在 Keil 中的头文件配置与调试实战》
  • CRYPT32!ASN1Dec_SignedDataWithBlobs函数分析之CRYPT32!ASN1Dec_AttributesNC的作用是得到三个证书
  • 垃圾回收算法详解
  • 《sklearn机器学习——回归指标2》
  • Java内部类
  • 再读强化学习(动态规划)
  • 时隔4年麒麟重新登场!华为这8.8英寸新「手机」给我看麻了
  • 《Ceph集群数据同步异常的根因突破与恢复实践》
  • 深入剖析RocketMQ分布式消息架构:从入门到精通的技术全景解析
  • Ubuntu 文件权限管理
  • 【正则表达式】选择(Alternation)和分支 (Branching)在正则表达式中的使用
  • MySQL InnoDB 的锁机制
  • Chrome 插件开发入门:打造个性化浏览器扩展
  • 神经网络|(十八)概率论基础知识-伽马函数·下
  • Follow 幂如何刷屏?拆解淘宝闪购×杨幂的情绪共振品牌营销
  • Doris 消费kafka消息
  • 通过PXE的方式实现Ubuntu 24.04 自动安装
  • 版本管理系统与平台(权威资料核对、深入解析、行业选型与国产平台补充)
  • 50.4k Star!我用这个神器,在五分钟内搭建了一个私有 Git 服务器!
  • 小程序的project.private.config.json是无依赖文件,那可以删除吗?
  • Aspose.Words for .NET 25.7:支持自建大语言模型(LLM),实现更安全灵活的AI文档处理功能
  • 《LangChain从入门到精通》系统学习教材大纲
  • java基础学习(四):类 - 了解什么是类,类中都有什么?
  • 25年下载chromedriver.140
  • 项目必备流程图,类图,E-R图实例速通
  • 面试 TOP101 贪心专题题解汇总Java版(BM95 —— BM96)
  • 实力登榜!美创科技荣膺数说安全《2025中国网络安全企业100强》
  • IDEA中Transaction翻译插件无法使用,重新配置Transaction插件方法
  • 基于飞算JavaAI的在线图书借阅平台设计实现
  • Process Explorer 学习笔记(第三章 3.2.2):定制可显示的列与数据保存