2020.7.15
學習目的:掌握函數(shù)的基本使用并熟悉幾種類
1.普通函數(shù)
- 沒有返回值 Unit等價于void,可以不寫
- fun study(money:Int):Int { } 有參數(shù)到涂,返回值類型為int
fun show(){
}
//沒有返回值 Unit==void,可以不寫
fun buy(money:Int):Unit{
}
fun study(money:Int):Int{
return 8888
}
- 如果函數(shù)的主體只是一句話,且其結果正是返回值沉御,則可以簡化
fun add(a:Int,b:Int)=a+b
返回值根據(jù)等號的右邊結果自動推斷 - 帶默認值的函數(shù)
fun work(money: Int=10000,name:String,type:String="Android開發(fā)"){ }
給指定參數(shù)賦值:work(name = "小王")
//帶默認值的函數(shù)
fun work(money: Int=10000,name:String,type:String="Android開發(fā)"){
}
// work(name = "小王")
-
可變參數(shù):fun add(vararg score:Int){ }
使用vararg聲明伐谈,傳入的是一個整型數(shù)組诵棵,數(shù)組名為score
調(diào)用:add(1,3,4,5,6,7,7)
fun add(vararg score:Int){
var sum=0
for (value in score){
sum+=value
}
print(sum)
}
// add(1,3,4,5,6,7,7)
- 內(nèi)部函數(shù)
函數(shù)的內(nèi)部還可以有函數(shù),如果一個函數(shù)的實現(xiàn)要分為幾個板塊距贷,最好使用內(nèi)部函數(shù)忠蝗,很集中什湘,并且可以相互調(diào)用
fun showView(){
fun loadData()="圖片"
fun showList(){
//下載數(shù)據(jù)
val img=loadData()
//展示
println("下載的圖片:$img")
}
showList()
}
//升級版showView()
fun showView2(){
fun loadData()="圖片"
fun showList(){
//下載數(shù)據(jù)
loadData().also {
println("下載的圖片:$it")
//it就是loadData的返回值,如此操作不需要另外用變量來接收
}
}
}
使用also關鍵字會更加簡潔
2.數(shù)據(jù)類
存儲一些基本的數(shù)據(jù)哟旗,沒有其他的功能
Kotlin的數(shù)據(jù)類比java的一般類更加方便饱亮,不用提供set/get方法
???????????????數(shù)據(jù)類的使用要求
- 1.數(shù)據(jù)類的主構造函數(shù)必須有至少一個參數(shù)
- 2.參數(shù)必須使用var或val修飾
- 3.不能使用 open inner abstract 修飾
數(shù)據(jù)類自帶重寫的toString方法近上,使用also關鍵字輕松輸出對象
data class User(var name:String,var pwd:String,var id:Int){
}
//User("小王","1234",24).also { print(it) }
3.嵌套和內(nèi)部類
一.嵌套類
- 嵌套類不能使用宿主類的屬性壹无,僅僅是位置上的關系,只需要使用宿主類的類名來調(diào)用
二.內(nèi)部類
- 內(nèi)部類和外部類是有聯(lián)系的失球,內(nèi)部類可以使用外部類的屬性实苞,內(nèi)部類依附于外部類,所以要先創(chuàng)建外部類的對象前硫,才能創(chuàng)建內(nèi)部類的對象
使用inner關鍵字聲明
class Bank{
var money=Money(0)
//錢
class Money(var num:Int){
}
//銀行卡
inner class Card(){
fun save(count:Int){
money.num+=count
}
fun withdraw(count: Int){
if(money.num>=count){
money.num-=count
println("取款成功")
}else{
println("余額不足")
}
}
}
}
//Bank.Money(200) 嵌套類的調(diào)用
//Bank().Card().save(20) 內(nèi)部類的調(diào)用
4.匿名類
- 接口:接口的方法默認是open
- 匿名類格式:object:接口名{ 重寫方法 }
interface OnTouchListener{
fun onTouchEvent(type:String)
}
fun didTouch(listener: OnTouchListener){
listener.onTouchEvent("手指按下")
}
//方法1:定義類實現(xiàn)接口->實例化這個實現(xiàn)類
class ButtonListener:OnTouchListener{
override fun onTouchEvent(type: String) {
println("接收到的事件為:$type")
}
}
//ButtonListener().apply { didTouch(this) }
//ButtonListener().also { didTouch(it) }
//方法2:匿名類方式
// didTouch(object:OnTouchListener{
// override fun onTouchEvent(type: String) {
// println("接收到的事件為:$type")
// }
// })
- 匿名內(nèi)部類
class QQQ{
fun show(){
dispatchTouch(object :OnTouchListener{
override fun onTouchEvent(type: String) {
println("接收到的事件為:$type")
}
})
}
fun dispatchTouch(listener: OnTouchListener){
listener.onTouchEvent("手指在滑動")
}
interface OnTouchListener{
fun onTouchEvent(type:String)
}
}
5.抽象類
場景:一個界面Activity->加載->顯示->結束
一個APP有多個界面跃巡,這些界面的共同之處可以抽出來形成一個模板,就是抽象類
- 抽象類里面可以定義:抽象屬性 抽象方法 普通方法->有實現(xiàn)
- 抽象屬性不能初始化,抽象方法不能實現(xiàn)
- 如果是子類必須實現(xiàn)外莲,那么就定義為抽象方法偷线,否則就定義為普通方法
- 如果要重寫抽象類的普通方法声邦,需要添加open
- 抽象類同樣默認為open亥曹,不能實例化
abstract class BaseActivity{
abstract var title:String
init {
run()
}
fun run(){
//創(chuàng)建界面
onCreate()
//暫停界面
//銷毀界面
}
abstract fun onCreate()
open fun onPause(){
}
fun destroy(){
}
}
class LoginActivity(override var title: String="登錄"):BaseActivity(){
// override var title: String="登錄" 此地也可以
override fun onCreate() {
println("開始搭建界面...")
}
override fun onPause() {
println("界面暫停了")
}
}