第一章
第一节:继承与重载和open关键字
- 1、kotlin类默认是final 修饰的,所以无法继承,如果要想让别的类继承,要用open修饰,相当于去掉final
- 2、kotin 所以方法默认是final修饰的,不能被重写,这和Java刚好相反,想要被继承就要在前面加open关键字
第二节 kotin类型转换
1、is 关键字。 A is B 相当于Java A instanceOf B
2、A 强转成 B类,用 A as B
第三节 kotlin Any类
Any 是kotlin的超类,没有具体实现,在各个平台内部实现
第四节 kotlin 对象的声明
1、声明单例
object KtTest{
init{ }
fun show() = println("我是单例")
}
fun main(){
//KtTest 既是单例的实例,也是类名
// 这就是典型的 单例
print(KtTest)
KtTest.show()
//相当于 KtTest.INSTANCE.show()
}
2、匿名对象表达式
open class KtTest{
open fun show{
println("我是父类函数")
}
}
fun main(){
val p : KtTest = object : KtTest(){
override fund show{
println("我是子类函数")
}
}
p.show() //打印的是子类的输出 这就是匿名对象
第五节 data 类
class A(var name : String,var age: Int)
data class A(var name : String,var age: Int)
// data 类相当于JavaBean ,要比普通类更丰富
// data类有 get set 解构操作等
第六节 copy函数
class A(var name : String,var age: Int){
var sex;
init{
sex = 'M'
}
constructor(name:String):this(name,90){
}
}
fun main(){
var a = A("zhangsan",80)
var b = a.copy("李四",20)
// copy 只会调用主构造,不会调用次构造等,切记
}
\
第二章
第一节 接口的定义
interface IUSB{
var usbVersion : String
var usbInertDevice : String
fun insetUSB() : String
}
class Mouse(override var usbVersion :String = "USB3.0",override var usbInertDevice = "鼠标"):IUSB{
override fun insetUSB():String = "我是鼠标"
}
接口的特点:
- 1、接口里的所有成员和接口本身都是 public 和 open 的,所以不需要open,这是接口的特性
- 2、接口没有构造
- 3、实现类不仅要重写接口的函数,也要重新接口的成员
- 4、接口实现代码区域,都要写override关键字来修饰
第二节抽象类
abstract class BaseActivity{
fun onCreate(){
}
abstract fun getLayoutId() : Int
}
class MainActivity : BaseActivity{
override getLayoutId(){
return 100;
}
}
//Kotlin抽象类和Java的一模一样
第三节 泛型
泛型类
class KtTest<T> (private val obj : T){
fun show() = println("泛型类:$obj")
}
data class Student(val name : String, val age : Int)
fun main(){
val stu = Student("张三",60)
KtTest(stu).show()
}
泛型 out 和 in
out T 泛型前加 out表示只读 。默认情况下泛型子类对象不能赋值给泛型父类对象,但是加 out的泛型可以。
int T 泛型前加 in表示不能被读取。int的特性刚好和out相反。
- 协变:out 父类 = 子类
- 逆变:in 子类 = 父类
第四节 扩展函数
class KtTest(name : String, age : Int)
fun KtTest.show(){
println("我是show函数:name:${name},age:${age}")
}
// KtTest.xxx 的内部都会持有 this ,这个类的当前对象,
//**并且这个对Java的类同样有效**
扩展函对Java类同样有效