Kotlin中级(5)- - - 初识Kotlin中的对象.md

万物皆对象

对象就是类的实例化

用Kotlin描述对象

class Friend{
    var name: String = ""
    var hairColor: String = ""
    .....
}

愉快的构造

1.主构造函数:

class Friend constructor(val name: String,val age: Int){}

主构造二

下面这种构造纯粹的传值,并不在这里定义属性
主构造里不能包含任何代码,Kotlin提供了初始代码块init

class Friend constructor(name: String, age: Int) {
    val name: String = name
    val age: Int = age
    
    init{
        
    }
}

次构造

次构造函数体写在Friend类定义的大括号中,也就是代码块中。而且在次构造函数的定义时,constructor这个关键字是必不可少的。

class Friend {
    val name: String
    val age: Int

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

主构造和次构造可以并存么?当然可以。但是如果类有一个主构造函数,那么每个次构造函数都需要委托给主构造函数。也就是说,次构造函数在最后还是要用到主构造函数。

class Friend(name: String,age: Int) {
    val name: String = name
    val age: Int = age
    var parent: Friend? = null

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

一旦有了修饰符,主构造函数的constructor关键字就不能省略了

属性

函数作为属性

class Number(val a: Int, val b: Int, var operator: (Int, Int) -> Int) {
    fun operatoion() {
        println(operator(a, b))
    }
}

fun test() {
    val num = Number(2, 3, { x, y -> x + y })
    num.operatoion()
    num.operator = { x, y -> x * y }
    num.operatoion()
}

在这段代码中我们定义的iperator属性为函数类型,(Int,Int)-> Int表示为参数为两个Int类型,返回值为一个Int类型。当然这里没有参数名哦。我们把这个函数属性定义为变量是为了可以日后进行改变以进行来个数的新的操作,在方法operation中,我们执行了这个函数,当然,一个属性能够当成函数来执行是不是很神奇呢?这就是Kotlin函数式编程的魅力!

gettter()、setter()

class Person(age: Int){
    var age = age
    val isAdult: Boolean
    get() = age >= 18
}

get()是自定义getter的标识,当我们从外部需要访问这个属性的值的时候,它会调用内部的getter把值传给我们。

class Person(age: Int){
    var age = age
    val isAdult: Boolean
    get() = age >= 18
    var addAge: Int
    get() = 0
    set(value){
        age += value
    }
}

setter是给在外部的属性赋值,通过var的定义,我们可以设置set(value){}自定义setter。当然,如果一个属性要自定义setter,也必须自定义它的getter

根据提供的引用内容,出现了两个关于Kotlin的错误信息。第一个引用显示了一个无法解析依赖的错误,指出无法下载kotlin-reflect.jar文件。第二个引用显示了一个关于kotlin-gradle-1.8.10.jar (org.jetbrains.kotlin:kotlin-reflect)",这个错误通常是由于Gradle无法找到所需的kotlin-reflect库而引起的。解决这个问题的方法是确保你的项目的Gradle配置正确,并且指定了正确的Kotlin版本。 你可以尝试以下几个步骤来解决这个问题: 1. 确保你的项目的build.gradle文件包含了正确的Kotlin版本和kotlin-gradle-plugin版本。你可以在build.gradle文件找到类似于以下代码的部分: ```groovy ext { kotlin_version = '1.8.10' } dependencies { // ... implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" // ... } buildscript { // ... dependencies { // ... classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // ... } } ``` 请确保kotlin_version变量的值与你想要使用的Kotlin版本一致,并且在dependencies和buildscript的classpath正确引用了kotlin-gradle-plugin。 2. 如果你已经确认了build.gradle文件的配置正确无误,那么可能是因为Gradle无法从远程仓库下载kotlin-reflect.jar文件。你可以尝试清除Gradle的缓存并重新构建项目。在命令行执行以下命令: ```shell ./gradlew clean ``` 然后重新构建项目: ```shell ./gradlew build ``` 这将清除Gradle的缓存并重新下载所需的依赖。 3. 如果上述步骤***切换到其他网络环境来解决这个问题。 希望以上步骤能够帮助你解决问题。如果你还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值