Kotlin学习(二)
来源:互联网 发布:网络工程施工与验收 编辑:程序博客网 时间:2024/06/05 02:42
Kotlin学习(二)
类的定义
class Abc {}
带构造函数的
class Person constructor(firstName: String) {}
如果构造函数有注解或可见性修饰符,这个 constructor 关键字是必需的,并且这些修饰符在它前面,若没有则可以省略
主构造函数不能包含任何的代码。初始化的代码可以放到以 init 关键字作为前缀的初始化块(initializer blocks)中,主构造的参数也可以在初始化块中使用
class Customer(name: String) { init { logger.info("Customer initialized with value ${name}") }}
init{} 中为构造函数函数体
也可以在类体内声明的属性初始化器中使用
class Customer(name: String) { val customerKey = name.toUpperCase()}
声明属性以及从主构造函数初始化属性,Kotlin 有简洁的语法
class Person(val firstName: String, val lastName: String, var age: Int) { // ……}
主构造函数中声明的属性可以是可变的(var)或只读的(val)
创建类的实例
val invoice = Invoice()//带构造方法的val customer = Customer("Joe Smith")//javaInvoice invoice = new Invoice();Customer customer = new Customer("Joe Smith");
kotlin没有new关键字
类继承
默认任何类都是基础继承自Any(Any 不是 java.lang.Object;尤其是,它除了 equals()、hashCode()和toString()外没有任何成员,要使用其他的 要用到扩展函数),所有的类默认都是不可继承的(final),所以我们只能继承那些明确声明open或者abstract的类
类上的 open 标注与 Java 中 final 相反,它允许其他类从这个类继承。默认情况下,在 Kotlin 中所有的类都是 final
class Person(name: String, surname: String) : Animal(name)
: 代替extends 并且被继承的类要加上()
如果该类有主构造函数,其基类型必须 用(基类型的)主构造函数参数就地初始化
当我们只有单个构造器时,我们需要在从父类继承下来的构造器中指定需要的参数。这是用来替换Java中的super调用的。
函数
fun onCreate(savedInstanceState: Bundle?) {}
用fun 函数名()进行定义
若没有指定它的返回值,它就会返回Unit,与Java中的void类似,但是Unit是一个真正的对象。
你当然也可以指定任何其它的返回类型
fun add(x: Int, y: Int) : Int { return x + y}
: 数据类型
形参也是通过 形参名 : 数据类型 定义
若函数返回的结果可以使用一个表达式计算出来,可以不使用大括号而是使用等号:
fun add(x: Int,y: Int) : Int = x + y
函数重载
通过给参数指定一个默认值使得它们变得可选,这样就只需要指定一个函数即可实现同名不同参数的函数重载
fun add(x:Int,y:Int=0,z:Int) : Int{ return x+y+z }
使用:
// 这里可以跳过y变量去使用a和z val a = add(3,z = 4) val b = add(3,4,5) Log.i("a", a.toString()) Log.i("b", b.toString())
函数覆盖
Kotlin 需要显式标注可覆盖的成员(open)和覆盖后的成员:
open class Base { **open** fun v() {} fun nv() {}}class Derived() : Base() { **override** fun v() {}}
调用超类实现
使用 super 关键字调用其超类的函数与属性访问器的实现
open class Foo { open fun f() { println("Foo.f()") } open val x: Int get() = 1}class Bar : Foo() { override fun f() { super.f() println("Bar.f()") } override val x: Int get() = super.x + 1}
抽象类
类和其中的某些成员可以声明为 abstract。 抽象成员在本类中可以不用实现,默认为open的,因为抽象类就是为了继承而产生的
接口
interface MyInterface { fun bar() fun foo() { // 可选的方法体 }}
一个类或者对象可以实现多个接口
class Child : MyInterface { override fun bar() { // 方法体 }}
- kotlin学习(二)
- Kotlin学习(二)
- Kotlin学习(二)Hello Kotlin
- kotlin学习笔记(二)
- kotlin学习笔记(二)
- Kotlin学习笔记(二)
- kotlin学习笔记(二)
- Kotlin学习笔记(二)---从零学习Kotlin
- Kotlin学习笔记(二):Kotlin与Java对比
- Kotlin学习(二)基本语法
- Kotlin学习笔记(二)循环,跳转
- Kotlin学习笔记(二)基本数据类型
- kotlin学习-基本语法(二)
- 一步一步学习Kotlin(二)
- 学习一下Kotlin(二)
- kotlin语法学习二
- Kotlin学习教程(二)
- Kotlin学习过程 二 Kotlin基础语法
- 算法-数组元素循环右移
- 希拉里:美国完全没有做好应对人工智能发展的准备
- 加州的道路下雪了!英伟达用人工智能“造雪”
- CreateInstance(__uuidof(Connection))执行失败的解决办法
- 《寻梦环游记》背后:一出“硅谷”遇上“好莱坞”的好戏
- Kotlin学习(二)
- MySQL5.6压缩包安装所踩的坑
- 解决tomcat 日志????异常
- 测试小工具3——白平衡和颜色空间转换
- spring
- 截取字符串指定指定字节数的内容,汉字不能截取部分
- LeetCode刷题记录
- Unity3D -- 输出堆栈信息(StackTrace)
- tomcat 远程调试