Kotlin 基础教程之类、对象、接口
作者:lqh 发布时间:2022-03-12 04:22:15
Kotlin 基础教程之类、对象、接口
Kotlin中类、接口相关概念与Java一样,包括类名、属性、方法、继承等,如下示例:
interface A {
fun bar()
fun foo() {
// 可选方法体
}
}
class Child: A {
override fun bar() {
// todo
}
override fun foo() {
super.foo()
}
}
class
构造器
Kotlin 中的类可以有一个 主构造器, 以及一个或多个次构造器, 主构造器是类头部的一部分, 位于类名称之后。
class Person constructor(name: String) {...}
如果主构造器没有任何注解(annotation), 也没有任何可见度修饰符, 那么 constructor 关键字可以省略
class Person(name: String) {...}
主构造器中不能包含任何代码. 初始化代码可以放在初始化代码段 (initializer block) 中
class Persion(name: String) {
private val firstName: String = name
private var age: Int
init {
age = 10
}
}
Kotlin 有一种简洁语法, 可以通过主构造器来定义属性并初始化属性值:
class Persion(val name: String, var age: Int) {...}
如果构造器有注解, 或者有可见度修饰符, 这时 constructor 关键字是必须的, 注解和修饰符要放在它之前
class Persion public @Inject constructor(val name: String) {...}
类还可以声明次级构造器 (secondary constructor)。如果类有主构造器, 那么次级构造器都必须委托给主构造器
class Persion(val name: String) {
constructor(name: String, age: Int): this(name) {
// todo
}
}
类实例化
Kotlin 没有 new 关键字
val persion = Persion("jason")
继承
Kotlin的继承概念和Java一样,”类名: 超类“ 冒号表示继承。
与Java的Object相对,Kotlin也有一个这样的Any类,类默认继承Any。
与Java的final相反,Kotlin类默认是final的,允许被继承的类,需要加 open 修饰。
open class Base {
open fun v() {...}
fun nv() {...} // can't be override
}
方法和属性的覆盖
方法的覆盖和Java类似,但是只有 open 的方法才能 override, final 类是不允许定义 open方法。
class Other: Base() {
override fun v() {...}
}
可以加final禁止ovrride, final override fun v() {...}
与方法的覆盖类似, Kotlin提供了属性的覆盖,例如
open class Foo {
open val x: Int = 0
}
class Bar(override val x: Int): Foo {...}
class Bar1: Foo() {
override var x: Int = 0 // override to var
}
抽象类
类本身, 或类中的部分成员, 都可以声明为 abstract 的, 抽象类不必标识 open。
abstract class Base {
abstract fun v()
}
同伴对象
Kotlin 的类没有静态方法, 大多数情况下, 建议使用包级函数(packagelevel function)替代, 或者使用同伴对象,
达到静态方法效果
class Foo {
companion object {
fun v() {}
}
}
interface
Kotlin 的接口和Java差不多,但是接口的属性不一样,Kotlin接口中的属性是抽象的。
interface A {
val x: Int
}
class B: A {
override val x: Int = 10
}
object
Kotlin 没有静态类, 可以用object实现静态类的效果。
object B {
fun foo() {
// do something
}
}
class A {
fun bar() {
B.foo()
}
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
来源:http://www.jianshu.com/p/2cd616cc60a5
猜你喜欢
- 周末了,觉得我还有很多作业没有写,针对目前大家对OOM的类型不太熟悉,那么我们来总结一下各种OOM出现的情况以及解决方法。我们把各种OOM的
- 本文实例讲述了从C#程序中调用非受管DLLs的方法。分享给大家供大家参考。具体方法如下:前言:从所周知,.NET已经渐渐成为一种技术时尚,那
- 事件处理主要涉及:事件源,事件,事件处理者在GUI中事件源是事件发生的场所,通常是各个组件,如被单击的按钮;事件是用户对界面的操作,如操作键
- 泛型中 T 类型变量 和 ? 通配符 区别定义不同 :T 是类型变量,? 是通配符使用范围不同:? 通配符用作 参数类型、字段类型、局部变量
- 这里写链接内容仿映客送小礼物的特效,顺便复习一下属性动画,话不多说先看效果图。需求分析可以看到整个动画有几部分组成,那我们就把每个部分拆分出
- 查找应用进程PID杀死应用进程PID运行启动脚本烦不烦啊,像我这么懒得人 得想个办法一步搞定!如下所示 新建一个shell脚本,然后将其运行
- 本文实例讲述了C#采用OpenXml实现给word文档添加文字的方法,分享给大家供大家参考。具体方法如下:一般来说,使用OpenXml给wo
- 本文实例讲述了Android编程中HTTP服务用法。分享给大家供大家参考,具体如下:在Android中,除了使用java.net包下的API
- (1)不需要传递参数,也不需要返回参数ThreadStart是一个委托,这个委托的定义为void ThreadStart(),没有参数与返回
- springboot用以进行web项目开发的便捷性,本文不再赘述,主要是想将工作中基于springboot与gradle的多模块项目的构建经
- 多对一(Many-to-One)映射多对一(many-to-one)关联是最常见的关联关系,其中一个对象可以与多个对象相关联。例如,一个相同
- 先说一下对异步和同步的理解:同步调用:调用方在调用过程中,持续等待返回结果。异步调用:调用方在调用过程中,不直接等待返回结果,而是执行其他任
- 本文实例为大家分享了JAVA实现人脸识别的具体代码,供大家参考,具体内容如下官方下载 安装文件 ,以win7为例,下载opencv-2.4.
- 文档中添加印章可以起一定的作用,比如,防止文件随意被使用,或者确保文档内容的安全性和权威性。C#添加图片印章其实也有很多实现方法,这里我使用
- 最初的源文件样式如下:用默认的配置进行格式化之后如下:使用如下配置后,格式化之后的代码如下:最终修改成下面这样比较合适:来源:https:/
- 霓虹是用来描绘图像的轮廓,勾画出颜色变化的边缘,加强其过度效果,使图像产生轮廓发光的效果。主要步骤:1、根据当前像素与其右方和下方像素的梯度
- 一、Images1、概述Image 类为Bitmap(位图) 和 Metafile(矢量图) 的类提供功能的抽象基类。Image类不能直接创
- 一、介绍以及编解码流程MediaCodec 类可用于访问低级媒体编解码器,即编码器/解码器组件。它是 Android 低级多媒体支持基础结构
- 使用java制作一款简单的扫雷游戏,供大家参考,具体内容如下import java.util.*;public class nephelok
- 本文实例为大家分享了java使用字符画一个海绵宝宝的具体代码,供大家参考,具体内容如下用字符画一个海绵宝宝用" &ldqu