本文内容是我在学习kotlin语法的过程中学习和总结的一点小知识,很入门,初级水平,大佬请忽略。
如有错误敬请指正,不胜感激。
Kotlin与java语法对比笔记(一):https://blog.csdn.net/LPL0129/article/details/86646378
10、定义类
- Kotlin中的类是使用
class
关键字来声明: - Kotlin中的类可以有一个主构造函数和一个或多个辅助构造函数。 主构造函数是类头的一部分:它在类名后面(和可选的类型参数)。 class Person constructor(firstName: String) { }
- 如果主构造函数没有任何注释或可见性修饰符,那么可以省略constructor关键字:class Person(firstName: String) {}
- 主构造函数不能包含任何代码。 初始化代码可以放在初始化程序块中,前缀为init关键字: class Customer(name: String) {init { logger.info("Customer initialized with value ${name}") } }
- 请注意,初始化程序块中可以使用主构造函数的参数。 它们也可以用在类体中声明属性的初始化器:class Customer(name: String) {val customerKey = name.toUpperCase()}
- 实际上,要声明属性并从主构造函数初始化它们,Kotlin有一个简洁的语法:class Person(val firstName: String, val lastName: String, var age: Int) {// ... }
- 与常规属性大体相同,主构造函数中声明的属性可以是多值(var)或只读(val)。
- 如果构造函数具有注释或可见性修饰符,则constructor关键字是必需的,修饰符将在它之前:class Customer public @Inject constructor(name: String) { ... }
11、接口
- Kotlinde的接口和java8中的接口相似:它们可以包含抽象方法的定义以及非抽象方法的实现,但它们不能包含任何状态。使用interface关键字而不是class来声明一个Kotlin接口。
//声明一个接口 interface IView { /** * 显示加载 */ fun showLoading() { } }
interface View : IView {
/**
* 显示加载
*/
override fun showLoading() {
println("我实现了接口")
}
}
- 如上,定义一个接口,并实现接口中的方法。Kotlin中使用:(冒号)代替Java中的extends和implements关键之,和Java一样,一个类可以实现多个接口,但只能集成一个类。
- 与Java中的@override注解类似,override修饰符用来标注被重写的父类或者接口的方法和属性。与java不同的是,在Kotlin中使用override修饰符是强制要求的。
- 接口的方法可以有一个默认实现,与Java8不同的是,Java8中要求你在这样的实现上标注default关键字,但在kotlin中没有这样的要求,只需要你提供一个方法体。
//声明一个接口 interface IView { /** * 显示加载 */ fun showLoading() = println("接口的默认实现") }
12、访问性修饰符
-
final 不能别重写,类中成员的默认使用
-
open 可以被重写,需要明确的表明
-
abstract 必须被重写,只能在抽象类中使用;抽象成员不能有实现。
-
override 重写父类或接口中的成员,如果没有使用final表明,重写的成员是开放的
13、内部类和嵌套类
- 像Java一样,在Kotlin中可以在一个类中声明另一个类。
- 区别是Kotlin的嵌套类不能访问外部类的实例,除非你特别的做出了要求。
- Kotlin中没有显示修饰符的嵌套类与Java中的static嵌套类是一样的,要是把它变成一个内部类来持有一个外部类的引用的话需要使用inner修饰符。
类A在另一个类B中的声明 | 在Java中 | 在Kotlin中 |
嵌套类(不存储外部类的引用) | static class A | class A |
内部类(存储外部类的应用) | class A | inner class A |