Kotlin學習day3——重點函數(shù)燃观、內(nèi)部類、抽象類

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("界面暫停了")
    }
}
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蛇受,隨后出現(xiàn)的幾起案子笼呆,更是在濱河造成了極大的恐慌,老刑警劉巖秸弛,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件递览,死亡現(xiàn)場離奇詭異,居然都是意外死亡嫂侍,警方通過查閱死者的電腦和手機挑宠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門懒鉴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來临谱,“玉大人奴璃,你說我怎么就攤上這事麦牺∑噬牛” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長叹话。 經(jīng)常有香客問我驼壶,道長热凹,這世上最難降的妖魔是什么般妙? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任突诬,我火速辦了婚禮旺隙,結果婚禮上催束,老公的妹妹穿的比我還像新娘抠刺。我一直安慰自己速妖,他們只是感情好罕容,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布露泊。 她就那樣靜靜地躺著惭笑,像睡著了一般沉噩。 火紅的嫁衣襯著肌膚如雪蚜厉。 梳的紋絲不亂的頭發(fā)上畜眨,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機與錄音斤斧,去河邊找鬼早抠。 笑死,一個胖子當著我的面吹牛撬讽,可吹牛的內(nèi)容都是我干的蕊连。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼游昼,長吁一口氣:“原來是場噩夢啊……” “哼甘苍!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起烘豌,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后星压,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡贾富,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡惹盼,死狀恐怖改化,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情懦窘,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布臊岸,位于F島的核電站崖技,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜宾巍,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧寺惫,春花似錦歉摧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽真友。三九已至,卻和暖如春站绪,著一層夾襖步出監(jiān)牢的瞬間锰蓬,已是汗流浹背辅肾。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人笆怠。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像刀崖,于是被迫代替她去往敵國和親蜂莉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355