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
猜你喜欢
- /** * 日期工具类 * 默认使用 "yyyy-MM-dd HH:mm:ss" 格式化日期&nbs
- 本文描述了TCP协议,首先简单介绍了TCP完成了一些什么功能;介绍了TCP报文格式,以及典型报文的数据格式;接着从链路控制和数据传输两个方面
- 需求使用 spring-boot 项目开发中,项目启动时“非常”慢的。如果每次修改代码或静态资源文件后都需要重新启动项目,这是多么痛苦的事。
- 前言当系统的并发比较高的时候,日志的处理输出也是一种性能的开销负担,所以,选择一个中间件来处理消费日志必不可少!下面是spring boot
- 一、前言 网上有许多的多线程断点续传操作,但总是写的很云里雾里,或者
- 请停止代码注释“干净的代码应该像写好的散文一样” - Robert C. Martin不良代码的通病就是有很多注释。这是凌乱的源代码最明显的
- Viewpager 横向滑动效果系统就自带了很多种,比如这个效果 那如果做成竖屏的这种效果呢 。我百度过很多,效果都不是很好,有的代码特别多
- 对数组使用 foreachC#提供 foreach 语句。 该语句提供一种简单、明了的方法来循环访问数组或任何可枚举集合的元素。 forea
- 本文实例分析了Android编程画图之抗锯齿解决方法。分享给大家供大家参考,具体如下:在画图的时候,图片如果旋转或缩放之后,总是会出现那些华
- 0.简介GridView 和 ListView 有共同的父类:AbsListView,因此 GridView 和 ListView 具有一定
- 本文实例讲述了Android基于ViewPager+Fragment实现左右滑屏效果的方法。分享给大家供大家参考,具体如下:1.xml布局模
- 本文实例讲述了Java简单实现调用命令行并获取执行结果。分享给大家供大家参考,具体如下:import java.io.BufferedRea
- 1,Java中操作方法:import java.io.*; public class FileInputStreamTest &
- 基本布局演示1. 定义包含GridView 的 main.xmk<?xml version="1.0" encod
- 今天来了一个问题:软键盘无法弹出。分析后是因为系统判断当前有外接硬键盘,就会隐藏软键盘。但实际情况并不是这么简单,该问题只有在特定条件下偶现
- 需要引入命名空间:using System;using System.Text;解码: public static string
- 并查集就是将原本不在一个集合里面的内容合并到一个集合中。在实际的场景中用处不多。除了出现在你需要同时去几个集合里面查询,避免出现查询很多次,
- 1、思维导图2、什么是MVC?MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(con
- 1 在图片上用鼠标进行操作,opencv主要用到setMouseCallback()函数。winname 窗口名称onMouse 鼠标事件的
- public class Change{ public static void main(String args[]){ fin