我的kotlin學(xué)習(xí)之旅-day4-2020-12-23

學(xué)習(xí)內(nèi)容

1.類的聲明
2.抽象類與接口
3.伴生類
4.數(shù)據(jù)類

package day1


class DemoClass

fun main(args:Array<String>){
    val demo = DemoClass()
    println(demo)
    println(demo is DemoClass)
    println(demo::class)
    var p = Person1("Tom",30,1)
    println(p)

    var p2 = Person2()
    p2.age = 30
    p2.name = "Tim"
    p2.sex = "M"
    println(p2)
    var rc = Retangle(3.0,4.0,5.0)
    println(rc.area())
    rc.onClick()
    var cl = Circle(3.0,4.0,10.0)
    println(cl.area())
    cl.onClick()
    val pp = Project()
    pp.print()
    println(User.name)
    println(User.password)
    User.hello() //與Java使用方式一樣
    DataProcessor.processData()
    val loginUser = LoginUser("admin","123")
    val (username,password) = loginUser
    println("username=${username},password=${password}")
    val map = mapOf(1 to "A",2 to "B",3 to "C")
    println(map)
}

/**
 * 伴生類
 *一個類只能有一個伴生類
 */
class DataProcessor{
    companion object DataProcessor{
        fun processData(){
            println("I am a processor class")
        }
    }
}

/**
 * object
 * 使用object關(guān)鍵字聲明一個單例
 */
object User{
    val name:String = "Admin"
    val password:String = "Admin"

    fun hello(){
        println("Hello world")
    }
}

interface ProjectS{
    var name:String
    var age:Int
    fun come()
    fun print(){
        println("project save")
    }
}

class Project:ProjectS{
    override var name: String
        get() = name
        set(value) {
            this.name = value
        }
    override var age: Int
        get() = age
        set(value) {
            this.age = value
        }

    override fun come() {
        super<ProjectS>.print()
        println("Project coming")
    }

}

/**
 * 抽象類
 */
abstract class Shape{
    //抽象類對成員也必須是抽象的
    abstract var width:Double
    abstract var height:Double
    abstract var radius:Double
    abstract fun area():Double //抽象方法

    /**
     * 默認(rèn)是final,不可重寫
     * 如果想要重寫改方法需要在
     * 方法前加open關(guān)鍵字
     */
    open fun onClick(){
        println("Item click")
    }
}

class Circle(override var width: Double, override var height: Double,
             override var radius: Double): Shape() {
    override fun area(): Double {
        return Math.PI*radius*radius
    }

    override fun onClick() {
        super.onClick()
        println("Circle click")
    }
}

class Retangle(override var width: Double, override var height: Double,
               override var radius: Double):Shape(){
    override fun area(): Double = width*height
}


class Person2{
    lateinit var name:String; //lateinit表示延遲初始化
    var age:Int = 0;//lateinit不能修飾Int類型
    lateinit var sex:String

    //次級構(gòu)造方法
    constructor(name: String, age: Int, sex: String) {
        this.name = name
        this.age = age
        this.sex = sex
    }

    constructor(name: String) {
        this.name = name
    }

    constructor(name: String, age: Int) {
        this.name = name
        this.age = age
    }

    constructor()


    override fun toString(): String {
        return "Person(name:$name,age:$age,sex:$sex)"
    }

}

/**
 * 構(gòu)造方法聲明
 */
class Person1(var name:String,var age:Int,var sex:Int){
    override fun toString(): String {
        return "Person(name:$name,age:$age,sex:$sex)"
    }
}

/**
 * 數(shù)據(jù)類
 * 主構(gòu)造函數(shù)至少包含一個參數(shù)
 * 參數(shù)必須標(biāo)示為val或者var
 * 不能為abstract,open,sealed,inner
 * 不能繼承其他類
 *
 */
data class LoginUser(val name:String,val password:String) {
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容