第一章
第一節(jié):繼承與重載和open關(guān)鍵字
- 1翻擒、kotlin類默認是final 修飾的敬辣,所以無法繼承,如果要想讓別的類繼承蟆豫,要用open修飾背零,相當于去掉final
- 2、kotin 所以方法默認是final修飾的无埃,不能被重寫徙瓶,這和Java剛好相反,想要被繼承就要在前面加open關(guān)鍵字
第二節(jié) kotin類型轉(zhuǎn)換
1嫉称、is 關(guān)鍵字侦镇。 A is B 相當于Java A instanceOf B
2、A 強轉(zhuǎn)成 B類织阅,用 A as B
第三節(jié) kotlin Any類
Any 是kotlin的超類壳繁,沒有具體實現(xiàn),在各個平臺內(nèi)部實現(xiàn)
第四節(jié) 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("我是父類函數(shù)")
}
}
fun main(){
val p : KtTest = object : KtTest(){
override fund show{
println("我是子類函數(shù)")
}
}
p.show() //打印的是子類的輸出 這就是匿名對象
第五節(jié) data 類
class A(var name : String,var age: Int)
data class A(var name : String,var age: Int)
// data 類相當于JavaBean 润樱,要比普通類更豐富
// data類有 get set 解構(gòu)操作等
第六節(jié) copy函數(shù)
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 只會調(diào)用主構(gòu)造,不會調(diào)用次構(gòu)造等壹若,切記
}
\
第二章
第一節(jié) 接口的定義
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养篓、接口沒有構(gòu)造
- 3、實現(xiàn)類不僅要重寫接口的函數(shù)赂蕴,也要重新接口的成員
- 4柳弄、接口實現(xiàn)代碼區(qū)域,都要寫override關(guān)鍵字來修飾
第二節(jié)抽象類
abstract class BaseActivity{
fun onCreate(){
}
abstract fun getLayoutId() : Int
}
class MainActivity : BaseActivity{
override getLayoutId(){
return 100;
}
}
//Kotlin抽象類和Java的一模一樣
第三節(jié) 泛型
泛型類
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相反。
- 協(xié)變:out 父類 = 子類
- 逆變:in 子類 = 父類
第四節(jié) 擴展函數(shù)
class KtTest(name : String, age : Int)
fun KtTest.show(){
println("我是show函數(shù):name:${name},age:${age}")
}
// KtTest.xxx 的內(nèi)部都會持有 this 挂捻,這個類的當前對象碉纺,
//**并且這個對Java的類同樣有效**
擴展函對Java類同樣有效