| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> Kotlin - 类和对象 -> 正文阅读 |
|
[移动开发]Kotlin - 类和对象 |
类概述和 Java 一样,Kotlin 中的类由 class 关键字修饰,比如:
但是不同的是,如果 Kotlin 的类是空的,即不含任何属性或方法,花括号是可以省略的:
Java 的祖先类是 Object,而 Kotlin 的祖先类是 Any,可以对比下二者包含的方法: Object.java
Any:
主构造方法Kotlin 类的构造方法分为主构造方法和副构造方法。
如果主构造方法前没有任何修饰符比如注解和可见性修饰符,constructor 关键字可以省略:
但是当存在注解和可见性修饰符时,就不能省略了:
我们也可以直接在主构造方法里面声明类的属性:
而且,在 1.4 及以上版本 Kotlin 中,我们可以在最后一个属性变量后面加个小尾巴逗号(trailing comma):
函数的参数列表也可以用:
或者:
这个小尾巴的作用是什么呢?首先,每个参数后面都有逗号,就避免最后一个参数不带参数这种特殊情况的出现,添加新参数或者调整参数顺序时可以连着参数后面的逗号一起进行;其次,当我们在参数列表最后添加带有逗号的新参数时,在查看代码 diff 的时候,只会出现一行新增代码,而不是一行删除的代码+一行新增的代码,具有更好的可阅读性。 注意,虽然叫构造方法,但是主构造方法里面不能含有代码行。初始化代码要放在初始化块里面,以
可以看到, 副构造方法出现在类名称后面的 constructor() 叫主构造方法,而出现在类内部的 constructor() 我们称之为副构造方法:
主副构造方法以及
实例化跟 Java 不同,Kotlin 中实例化对象无需 new 关键字:
属性详见 Kotlin 属性。 继承Kotlin 类默认是不能继承的,只有被 open 修饰的类才能被继承:
这是一个比 Java 方便的地方。根据笔者的经验,多数时候我们是不想类被别人继承的。特别是在多业务线开发的时候,你写了一个控价,本来这个控件是业务定制的,但是总有一些想偷懒的同学直接继承你的控件来实现他们的业务需求,连声招呼都不带打的,当你需要迭代自己的控件时,发现因为继承关系的存在导致各种问题。而往往写 Java 代码时会忽略使用 final 关键字,Kotlin 就解决了这个痛点,默认不能继承,只有显式使用 open 关键字才能被继承。 如果 Kotlin 子类含有主构造方法,那么基类也要显式的展示出其主构造方法,而且二者的参数要一致:
如果子类只有副构造方法,没有主构造方法,那么子类中的副构造方法要使用冒号来继承父类中对应的构造方法,或者委托给其他的副构造方法:
方法重写与 Java 不同,在 Koltin 类中被 open 修饰的方法才能被重写。没有被 open 修饰的方法,不能在子类里面声明同样名称的方法,不然编译器会报错,比如下面的 Shape.fill() 方法:
注意,被 override 修饰的方法是天然 open 的,如果不想被重写,可以使用 final 关键字:
那如果我在非 open 的类的方法前面添加 open 修饰符会怎么样?比如:
此时,open 修饰符不会生效。 属性重写跟方法重写类似,子类重写父类的属性,也是使用 override 关键字来实现。同时二者的类型要兼容:
在子类中可以用 var 类型的属性重写父类中 val 类型的属性,而反过来则不行。这是因为,val 类型的属性本质上声明了一个 get 方法,而使用 var 重写它相当于新增了一个 set 方法。
初始化顺序抽象类和 Java 一样,抽象类使用 abstract 关键字修饰。 接口和 Java 一样,接口使用 interface 关键字修饰:
接口中的方法默认都是 open 的,所以可以省略该关键字。 |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年2日历 | -2025/2/5 20:18:00- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |