Kotlin中的面向对象

面向对象
面向对象的含义大家应该并不陌生,通过将事物抽象成对象,大大简化了程序的开发难度。我们常用的Java、Python、C++都属于面向对象的编程语言。Kotlin和java很相似,也是一种面向对象的语言。作为Kotlin中最重要的一部分,我们可以通过了解Kotlin的OOP进而了解这门语言,本文将从类、属性、接口、对象等多个方面介绍Kotlin的面向对象的特性。
类
和大部分语言类似,Kotlin使用class作为类的关键字,当我们声明一个类时,需要通过class加类名的方式实现:
class ClassDemo{
}
在声明一个类的时候,至少需要包含class关键字以及后面的类名,同时也可以根据需要增加类头(用来声明一些参数)和类体(花括号{}中包含的内容,可省略)。
构造函数
与java不同的是,虽然都可以包含多个构造函数,但java中的各个构造函数都是平级的,而Kotlin中却分为了两级(主构造函数和二级构造函数),主构造函数是包含在类头中的,需要在init方法中实现额外的操作,而二级构造函数可以在函数体中实现所有操作
//主构造函数,constructor和init都可省略
class ClassDemo constructor(type:String){
init{
System.out.println(type)
}
}
在主构造函数中传入的参数可以在类体中为属性赋值,也可以直接在主构造函数中声明
class ClassDemo(type:String, var prop2: String = type){
var prop1 = type
}
二级构造函数必须包含constructor
class ClassDemo{
constructor(type:String){
System.out.println(type)
}
}
对于有主构造函数的类而言,每个二级构造函数都要,或直接或间接通过另一个二级构造函数代理主构造函数。在同一个类中代理另一个构造函数使用 this 关键字:
//包含主构造函数的二级构造函数
class ClassDemo(type:String){
constructor(type:String, param:String):this(type){
System.out.println(type + param)
}
}
无论有没有声明主构造函数,Kotlin都会提供一个构造函数的方法,有时可能不希望将某个类的构造函数暴露出来(比如实现单例模式时),那么就需要对主构造函数进行处理
class ClassDemo private constructor(){
}
当我们想创建实例时,可以直接调用对应的构造函数进行创建
var demo = ClassDemo("hello world")
val demo = ClassDemo("hello","world")
我们注意到,在Kotlin中无论是声明属性还是创建实例,会有两种方式,var和val,val类似于java中的final,通过它声明的内容是无法变化的,而var和val相反,声明的内容既可以读取也可以修改。
继承
在Kotlin中,所有的类会默认继承Any这个父类,但Any并不完全等同于java中的Object类,因为它只有equals(),hashCode()和toString()这三个方法。当我们想定义一个父类时,需要使用open关键字
open class Base{
}
然后在子类中使用冒号“:”进行继承
class SubClass : Base(){
}
如果父类有构造函数,那么必须在子类的主构造函数中进行继承,没有的话则可以选择主构造函数或二级构造函数
//父类
open class Base(type:String){
}
//子类
class SubClass(type:String) : Base(type){
}
重写
Kotlin中的重写和java中也有所不同,因为Kotlin提倡所有的操作都是明确的,因此需要将希望重写的方法设为open
open fun funDemo() {}
然后通过override标记实现重写
override fun funDemo() {
super.funDemo()
}
override重写的函数也是open的,如果希望它不被重写(前提是这个类可以被继承),可以在前面增加final标签
open class SubClass : Base{
constructor(type:String) : super(type){
}
final override fun funDemo() {
super.funDemo()
}
}
当一个类同时继承且实现了多个接口时,如果重写的方法在父类和接口中都有定义,那么可以通过super<>的方式进行继承
//接口
interface InterfaceDemo{
fun funDemo(){}
}
//继承Base并且实现InterfaceDemo
class SubClass : Base(),InterfaceDemo{
final override fun funDemo() {
super<Base>.funDemo()
super<InterfaceDemo>.funDemo()
}
}
密封类
密封类用于代表严格的类结构,值只能是有限集合中的某中类型,不可以是任何其它类型。这就相当于一个枚举类的扩展:枚举值集合的类型是严格限制的,但每个枚举常量只有一个实例,而密封类的子类可以有包含不同状态的多个实例。声明密封类需要在 class 前加一个 sealed 修饰符。密封类可以有子类但必须全部嵌套在密封类声明内部。
//密封类
sealed class Expr {
class Const(val number: Double) : Expr()
class Sum(val e1: Expr, val e2: Expr) : Expr()
object NotANumber : Expr()
}
和Kotlin中的类相关的用法就介绍到这里,文中的完整代码见github,在Kotlin中的面向对象(二)中将会介绍属性、接口等面向对象过程中同样常见的内容。
文章代码下载:http://xiazai./201706/yuanma/helloKotlin-master().rar
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# Kotlin中的面向对象
# Kotlin面向对象分析
# 详解Kotlin中的面向对象(二)
# Kotlin基础教程之面向对象
# Kotlin面向对象知识点讲解
# 重写
# 面向对象
# 多个
# 子类
# 都是
# 当我们
# 类中
# 的是
# 都有
# 会有
# 都要
# 将会
# 最重要
# 两种
# 不可以
# 设为
# 我们可以
# 这就
# 有所不同
# 可以通过
相关文章:
MySQL查询结果复制到新表的方法(更新、插入)
广州美橙建站如何快速搭建多端合一网站?
如何高效利用200m空间完成建站?
如何在景安服务器上快速搭建个人网站?
c++ stringstream用法详解_c++字符串与数字转换利器
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
如何在宝塔面板中创建新站点?
如何快速生成高效建站系统源代码?
小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
建站三合一如何选?哪家性价比更高?
建站VPS能否同时实现高效与安全翻墙?
建站之星如何通过成品分离优化网站效率?
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
建站之星免费模板:自助建站系统与智能响应式一键生成
如何确保FTP站点访问权限与数据传输安全?
如何快速搭建安全的FTP站点?
,如何利用word制作宣传手册?
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
如何在腾讯云免费申请建站?
网站微信制作软件,如何制作微信链接?
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
制作国外网站的软件,国外有哪些比较优质的网站推荐?
如何选择适配移动端的WAP自助建站平台?
制作农业网站的软件,比较好的农业网站推荐一下?
如何制作算命网站,怎么注册算命网站?
建站之星后台密码遗忘?如何快速找回?
盘锦网站制作公司,盘锦大洼有多少5G网站?
如何快速搭建高效可靠的建站解决方案?
做企业网站制作流程,企业网站制作基本流程有哪些?
h5在线制作网站电脑版下载,h5网页制作软件?
网站设计制作公司地址,网站建设比较好的公司都有哪些?
沈阳制作网站公司排名,沈阳装饰协会官方网站?
长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
广州建站公司哪家好?十大优质服务商推荐
如何快速搭建个人网站并优化SEO?
如何选择高效便捷的WAP商城建站系统?
公司网站制作费用多少,为公司建立一个网站需要哪些费用?
如何快速生成凡客建站的专业级图册?
如何在阿里云完成域名注册与建站?
建站主机类型有哪些?如何正确选型
如何高效完成独享虚拟主机建站?
制作宣传网站的软件,小红书可以宣传网站吗?
如何在阿里云ECS服务器部署织梦CMS网站?
建站之星如何修改网站生成路径?
Python多线程使用规范_线程安全解析【教程】
如何在云指建站中生成FTP站点?
如何用PHP快速搭建CMS系统?
公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?
*请认真填写需求信息,我们会在24小时内与您取得联系。