Kotlin 类和对象
2019-01-28 本文已影响7人
奔跑吧技术人
前言
- 你还在把Java当成Android官方开发语言吗?Kotlin了解一下!
- 2017年Google IO大会宣布使用Kotlin作为Android的官方开发语言,相比较与典型的面相对象的JAVA语言,Kotlin作为一种新式的函数式编程语言,也有人称之为Android平台的Swift语言。
环境以及工具
Android Studio 3.3
类的修饰符
//----------------------- 类的修饰符-------------------------------------
//类属性修饰符
// abstract // 抽象类
// final // 类不可继承,默认属性
// enum // 枚举类
// open // 类可继承,类默认是final的
// annotation // 注解类
//访问权限修饰符
// private // 仅在同一个文件中可见
// protected // 同一个文件中或子类可见
// public // 所有调用的地方都可见
// internal // 同一个模块中可见
类定义
定义类、属性、函数
//-----------------------类定义-------------------------------------
class Hello {
var name: String = "boyi.chen"
var age: Int = 100
fun sayHello() {
println("hello kotlin")
}
}
fun main(args: Array<String>) {
//-----------------------类定义-------------------------------------
val hello = Hello()
println(hello.name + ":" + hello.age)//输出结果-------------------------boyi.chen:100-------------------------
}
主构造函数、次构造函数
//-----------------------主、次构造函数-------------------------------------
class Student constructor(name: String) {
//属性初始化
// also在函数块内可以通过 it 指代该对象
val firstProperty = "First property: $name".also {
println(it)
}
constructor(name: String, age: Int) : this(name) {
println("次构造函数->name is $name : age is $age")
}
init {
println("初始化块->name is $name")
}
}
fun main(args: Array<String>) {
//-----------------------主、次构造函数-------------------------------------
//如果类有主构造函数,每个次构造函数都要,或直接或间接通过另一个次构造函数代理主构造函数
val student = Student("boyi.chen")
// *********************************输出结果*********************************
// First property: boyi.chen
// 初始化块->name is boyi.chen
// *********************************输出结果*********************************
}
嵌套类
类可以嵌套在其他类中
//-----------------------嵌套类-------------------------------------
class Outer {
private val name: String = "boyi.chen"
class Inner {
val age: Int = 999
}
}
fun main(args: Array<String>) {
//-----------------------嵌套类 -------------------------------------
println(Outer.Inner().age)//输出结果-------------------------999-------------------------
}
内部类
类可以标记为 inner 以便能够访问外部类的成员。内部类会带有一个对外部类的对象的引用
//-----------------------内部类-------------------------------------
//内部类使用 inner 关键字来表示
//内部类会带有一个对外部类的对象的引用,所以内部类可以访问外部类成员属性和成员函数。
//要访问来自外部作用域的 this,我们使用this@label,其中 @label 是一个 代指 this 来源的标签
class Outer2 {
private val name: String = "boyi.chen"
val name2: String = "boyi.chen2"
inner class Inner2 {
val temp: String = name
val objects = this@Outer2
}
}
fun main(args: Array<String>) {
//-----------------------内部类-------------------------------------
println(Outer2().Inner2().temp)//输出结果-------------------------boyi.chen-------------------------
println(Outer2().Inner2().objects.name2)//输出结果-------------------------boyi.chen2-------------------------
}
匿名内部类
//-----------------------匿名内部类-------------------------------------
interface OnClickListener {
fun test()
}
class Test {
var name = "匿名内部类"
fun setOnClickListener(test: OnClickListener) {
test.test()
}
}
fun main(args: Array<String>) {
//-----------------------匿名内部类-------------------------------------
val test = Test()//输出 接口定义的方法在匿名内部类中实现
test.setOnClickListener(object : OnClickListener {
override fun test() {
println("接口定义的方法在匿名内部类中实现")
}
})//输出结果-------------------------接口定义的方法在匿名内部类中实现-------------------------
}
源码
请关注公众号并在后台回复:kotlin
Kotlin重构系列分享教程
Kotlin环境搭建
Kotlin重构初体验之告别FindViewById
Kotlin基本类型
Kotlin 控制语句 if when for while
Kotlin返回与跳转
Kotlin重构如何兼容原先的ButterKnife、EventBus3.1
当ButterKnife8.8.1碰到AndroidX怎么办
Githup教程开源项目
Python爬虫系列分享教程
Python爬虫之旅之Selenium库的使用
Python爬虫之旅之豆瓣音乐