-
kotlin - get和set
/** * @ 文件名: `1.get和set` * @ 創建者: ty * @ 時間: 2018/7/14 09:41 * @ 描述: kotlin中的字段默認是私有的,get和set方法是自動生成的 */ fun main(args: Array<String>) { val person = Person() person.say() println(person.name) println(person.age) } open class Person { var name: String = "林志玲" var age = 19 fun say() { println("高德地圖持續為您服務") } }
-
kotlin - 訪問器
private set
/** * @ 文件名: `02.訪問器` * @ 創建者: ty * @ 時間: 2018/7/14 09:47 * @ 描述: 通過private set 設置可以私有set或者get方法 */ fun main(args: Array<String>) { val user = User() println(user.login(user.phone, user.password)) } class User { //private //寫在上面表示set 和 get 方法都會生成 var phone: String = "110" private set//私有化set:private final void setPhone(String var1) {this.phone = var1; } var password: String = "12345" fun login(phone: String, pwd: String): String { return phone + pwd } }
-
kotlin - 自定義訪問器
set(){}
this.age
field
/** * @ 文件名: `03.自定義訪問器` * @ 創建者: ty * @ 時間: 2018/7/14 09:51 * @ 描述: set(){} this.age會引起棧溢出,用field。 */ fun main(args: Array<String>) { val goods = Goods() goods.price = 20199 println(goods.price) } class Goods { var name: String = "Mac" var price: Int = 18880 set(price) { if (price > 20000) { //this.price = price 遞歸調用導致棧溢出:if (price > 20000) {this.setPrice(price);} field = price } } }
-
kotlin - 構造函數
/** * @ 文件名: `04.構造函數` * @ 創建者: ty * @ 時間: 2018/7/14 09:54 * @ 描述: */ fun main(args: Array<String>) { val address = Address("廣東省深圳市寶安區", "皮特", 10086) println(address.address + address.name + address.score)//廣東省深圳市寶安區皮特10086 } class Address(address: String, name: String, score: Int) { var address: String = address var name: String = name var score: Int = score }
-
kotlin - 構造函數參數使用
init
/** * @ 文件名: `05.構造函數參數使用_init` * @ 創建者: ty * @ 時間: 2018/7/14 09:56 * @ 描述: */ fun main(args: Array<String>) { val item = Item("標題一", "https://www.baidu.com", 12315) println(item.title + item.url + item.id) } class Item(title: String, url: String, id: Int) { var title: String = "" var url: String = "" var id: Int = 10000 init { this.title = title this.url = url this.id = id } //init 中的代碼會在構造函數中執行 /*public Item(@NotNull String title, @NotNull String url, int id) { Intrinsics.checkParameterIsNotNull(title, "title"); Intrinsics.checkParameterIsNotNull(url, "url"); super(); //默認定義的字段 this.title = ""; this.url = ""; this.id = 10000; //init 塊中的代碼 this.title = title; this.url = url; this.id = id; }*/ }
-
kotlin - 構造函數參數使用
var
val
/** * @ 文件名: `06.構造函數參數使用var和val` * @ 創建者: ty * @ 時間: 2018/7/14 09:58 * @ 描述: */ fun main(args: Array<String>) { val brand = Brand("奶粉", 12306) println(brand.name + brand.id) //brand.name = "電腦辦公"不能被重新賦值 } class Brand(val name: String, var id: Int) //@NotNull //private final String name; //private int id;
-
kotlin - 次構函數
constructor
/** * @ 文件名: `07.次構函數` * @ 創建者: ty * @ 時間: 2018/7/14 10:01 * @ 描述: */ fun main(args: Array<String>) { val person = Person("林志穎", 18, "12345") val person1 = Person("林志玲", 30) println("person: ${person.phone}") println("person1: ${person1.phone}") } class Person(name: String, age: Int) { var phone: String = "10000" constructor(name: String, age: Int, phone: String) : this(name, age) { this.phone = phone } }
-
kotlin - init和次構函數的執行順序
/** * @ 文件名: `08.init和次構函數的執行順序` * @ 創建者: ty * @ 時間: 2018/7/14 10:02 * @ 描述: */ fun main(args: Array<String>) { val person = Person("王祖賢", 18,"12312") println(person.name) //執行了init初始化 //執行了次構函數 //王祖賢 } class Person(var name: String, var age: Int) { init { println("執行了init初始化") } constructor(name: String, age: Int, phone: String) : this(name, age) { println("執行了次構函數") } }
-
kotlin - 繼承
:
/** * @ 文件名: `09.繼承` * @ 創建者: ty * @ 時間: 2018/7/14 10:26 * @ 描述: */ fun main(args: Array<String>) { val father = Father() father.eat() father.smoking() val son = Son() //son.name = "張四" //son.age = 19 println(son.name + son.age) son.eat() } open class Father { open var name: String = "張三" open var age: Int = 39 open fun eat() { println("父親喜歡吃米飯") } fun smoking() { println("父親喜歡抽煙") } } class Son : Father() { override var name:String = "張四" override var age:Int = 19 override fun eat() { //super.eat() println("兒子喜歡吃面條") } }
-
kotlin - 抽象類
abstract
/** * @ 文件名: `10.抽象類` * @ 創建者: ty * @ 時間: 2018/7/14 10:27 * @ 描述: */ fun main(args: Array<String>) { val chinese = Chinese() chinese.say() val america = America() america.say() } abstract class Human { abstract var skinColor: String abstract var language: String abstract fun say() } class Chinese : Human() { override var language: String = "中文" override var skinColor: String = "黃色" override fun say() { println("中國人皮膚顏色是${skinColor},中國人講$language") } } class America : Human() { override var skinColor: String = "白色" override var language: String = "英語" override fun say() { println("美國人皮膚顏色是${skinColor},美國人講$language") } }
-
kotlin - 接口
/** * @ 文件名: `11.接口` * @ 創建者: ty * @ 時間: 2018/7/14 10:28 * @ 描述: */ fun main(args: Array<String>) { val peat = Peat() println(peat.name + peat.age) peat.drive() } abstract class Man { abstract var name: String abstract var age: Int } class Peat : Man(), Drive { override var name: String = "peat" override var age: Int = 18 override fun drive() { println("peat學會了開車") } } interface Drive { fun drive() }
-
kotlin - 接口細節
kotlin接口中的字段不能實現
/** * @ 文件名: `12.接口細節_字段` * @ 創建者: ty * @ 時間: 2018/7/14 10:29 * @ 描述: */ fun main(args: Array<String>) { val peat = Peat() println(peat.name + peat.age + peat.license) peat.drive() } abstract class Man { abstract var name: String abstract var age: Int } class Peat : Man(), Drive { override val license: String = "10086" override var name: String = "peat" override var age: Int = 18 override fun drive() { println("peat學會了開車") } } //開車能力 interface Drive { //駕照號碼 val license: String //開車行為 fun drive() }
-
kotlin - 接口細節
kotlin接口中的方法可以實現
/** * @ 文件名: `13.接口細節_方法` * @ 創建者: ty * @ 時間: 2018/7/14 10:34 * @ 描述: kotlin 接口中的字段不能實現,但是方法可以實現。Java接口中的方法不能實現 */ fun main(args: Array<String>) { val peat = Peat() println(peat.name + peat.age + peat.license) peat.drive() } abstract class Man { abstract var name: String abstract var age: Int } class Peat : Man(), Drive { override val license: String = "10086" override var name: String = "peat" override var age: Int = 18 //override fun drive() } //開車能力 interface Drive { //駕照號碼 val license: String //開車行為 fun drive() { println("踩離合、掛擋、松離合、踩油門、走你") } }
-
kotlin - 多態
/** * @ 文件名: `14.多態` * @ 創建者: ty * @ 時間: 2018/7/14 10:36 * @ 描述: */ fun main(args: Array<String>) { val dog: Animal = Dog() val cat: Animal = Cat() dog.call() cat.call() } abstract class Animal { abstract var name: String open fun call() { println("動物叫") } } class Dog : Animal() { override var name: String = "旺財" override fun call() { println("${name}汪汪叫") } } class Cat : Animal() { override var name: String = "Tom" override fun call() { println("${name}喵喵叫") } }
-
kotlin - 智能類型轉換
is
/** * @ 文件名: `15.智能類型轉換` * @ 創建者: ty * @ 時間: 2018/7/14 10:36 * @ 描述: kotlin 中不需要強轉,智能類型推斷 */ fun main(args: Array<String>) { val shepHerdDog: Dog = ShepHerdDog() val ruralDog: Dog = RuralDog() if (shepHerdDog is ShepHerdDog) { val herdDog = shepHerdDog as ShepHerdDog//沒有轉換的必要 herdDog.herdSheep() } if (ruralDog is RuralDog) { ruralDog.watchDoor() } } abstract class Dog class ShepHerdDog : Dog() { fun herdSheep() { println("牧羊犬的作用是放羊") } } class RuralDog : Dog() { fun watchDoor() { println("中華田園犬的作用是看家") } }
-
kotlin - 嵌套類
嵌套類是靜態的
/** * @ 文件名: `16.嵌套類` * @ 創建者: ty * @ 時間: 2018/7/14 10:37 * @ 描述: */ fun main(args: Array<String>) { val innerClass = OutClass.InnerClass()//inner類是靜態的:public static final class InnerClass println(innerClass.name) innerClass.sayHello() val outClass = OutClass() println(outClass.name) } class OutClass { var name: String = "out" class InnerClass { var name: String = "inner" fun sayHello() { println("你好$name")//訪問的inner類的name字段 } } }
-
kotlin - 內部類
inner class
/** * @ 文件名: `17.內部類` * @ 創建者: ty * @ 時間: 2018/7/14 10:38 * @ 描述: inner 關鍵字可以去掉static屬性 */ fun main(args: Array<String>) { val innerClass = OutClass().InnerClass()//public final class InnerClass innerClass.sayHello() } class OutClass { var name: String = "out" inner class InnerClass { var name: String = "inner" fun sayHello() { println("say 你好 $name") } } }
-
kotlin - 內部類中使用this
this@OutClass.name
/** * @ 文件名: `18.內部類使用this` * @ 創建者: ty * @ 時間: 2018/7/14 10:40 * @ 描述: 內部類和Java一樣需要依賴外部類對象環境。this@tag 和 Java中的OutClass.this.name 一樣 */ fun main(args: Array<String>) { val innerClass = OutClass().InnerClass() innerClass.sayHello() } class OutClass { var name: String = "out" inner class InnerClass { var name: String = "inner" fun sayHello() { println("say 你好 ${this@OutClass.name}") } } }
-
kotlin - 泛型
<T> T
/** * @ 文件名: `19.泛型` * @ 創建者: ty * @ 時間: 2018/7/14 10:40 * @ 描述: */ fun main(args: Array<String>) { val apple = Apple() val orange = Orange() val box = FruitBox(apple)//定義的水果箱子可以放??和?? //val sonBox = SonBox<Apple>(orange)//定義的??箱子不能放入??,只能放入?? val sonBox = SonBox<Apple>(apple) } //定義一個水果類 abstract class Fruit //定義一個??類 class Apple : Fruit() //定義個橘子??類 class Orange : Fruit() //定義一個不知道裝什么東西的箱子 open class Box<T>(var thing: T) //不知道具體放什么東西,前面聲明,后面兩個都是 使用 class SonBox<T>(thing: T) : Box<T>(thing) //水果箱子 class FruitBox(thing: Fruit) : Box<Fruit>(thing)
-
kotlin - 泛型函數
<T> T
/** * @ 文件名: `20.泛型函數` * @ 創建者: ty * @ 時間: 2018/7/14 10:42 * @ 描述: */ fun main(args: Array<String>) { add("a")//[a] add(12)//[12] val dog = Dog() add(dog)//[com.ty.ktolin.day03.Dog@49476842] } //定義一個函數,參數泛型為T fun <T> add(item: T) { val listOf = arrayListOf<T>() listOf.add(item) println(listOf) }
-
kotlin - 泛型上限
T:Fruit
/** * @ 文件名: `21.泛型上限` * @ 創建者: ty * @ 時間: 2018/7/14 10:43 * @ 描述: * 定義對象的時候使用泛型 * 定義子類時候執行泛型 * 定義子類的時候不知道具體類型,繼續使用泛型 * T:Fruit 泛型上限 泛型智能是Fruit類型或者Fruit類型的子類 * 泛型作用:放任何類型 限制存放的類型 */ fun main(args: Array<String>) { val two = Two() val three = Three() val four = Four() val five = Five(two) val five1 = Five(three) //val five2 = Five(four) } abstract class One open class Two : One() class Four : One() class Three : Two() class Five<T : Two>(var num: T)
-
kotlin - 泛型擦除
泛型前加reified
方法前inline
/** * @ 文件名: `22.泛型擦除` * @ 創建者: ty * @ 時間: 2018/7/14 10:48 * @ 描述: * 兩種類型應該是不一樣的 * 必須要通過反射獲取泛型類型 * * 解決泛型擦除方案: * 第一步:泛型前加reified關鍵字 * 第二步:方法前加上inline關鍵字 */ fun main(args: Array<String>) { parseType("a") } inline fun <reified T> parseType(thing: T) { //獲取傳遞的thing的class類型 val name = T::class.java.name println(name) }
-
kotlin - 泛型類型投射
out Fruit
in Fruit
/** * @ 文件名: `23.泛型類型投射` * @ 創建者: ty * @ 時間: 2018/7/14 10:49 * @ 描述: * in:接收當前類型或者它的父類 相當于java的 ? super * out:接收當前類型或它的子類 相當于java的 ? extents */ fun main(args: Array<String>) { val arrayList = ArrayList<Fruit>() val apple = Apple() val fushiApple = FushiApple() arrayList.add(apple) arrayList.add(fushiApple) setFruitList(arrayList) //addFruitList(arrayList) } //能裝富士蘋果以及他的父類 fun setFruitList(list: ArrayList<in FushiApple>) { println(list.size) } //只能裝富士蘋果以及他的子類 fun addFruitList(list: ArrayList<out FushiApple>) { println(list.size) } //定義一個水果類 abstract class Fruit //定義一個??類 open class Apple : Fruit() //定義一個富士??類 class FushiApple : Apple()
-
kotlin - 星號投射
*
/** * @ 文件名: `24.星號投射` * @ 創建者: ty * @ 時間: 2018/7/14 10:50 * @ 描述: *可以傳遞任何類型 相當于java的 ? */ fun main(args: Array<String>) { val arrayList = ArrayList<Int>() arrayList.add(111) add(arrayList) val list = ArrayList<String>() list.add("abc") add(list) } fun add(list: ArrayList<*>) { println(list.size) }
筆記:kotlin 學習第三天
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
推薦閱讀更多精彩內容
- 你曾經經驗過整個宇宙的背景是什么嗎?也許大家會說我從來沒經驗過。待會兒我告訴你,其實你經驗過。 凱西曾經提到過,整...