Kotlin编程之对象的表达式和声明

Kotlin编程相关知识点介绍


前言:

有时候我们想要创建一个对当前类有一点小修改的对象,但不想重新声明一个子类。java 用匿名内部类的概念解决这个问题。Kotlin 用对象表达式和对象声明巧妙的实现了这一概念

对象表达式


用表达式创建某些继承匿名类的对象:

package com.xingen.kotlin.day2017529

fun main(args: Array<String>) {
    test()
    test1()
}
/**
 * 测试有父类和接口的匿名类
 */
fun test() {
    var t = object : Test2017529("创建继承方式延伸的匿名内部类"), Test1Interface {
        override fun test() {
            println("创建接口延伸的匿名内部类")
        }
    }
    println(t.v)
    t.test()
}
/**
 * 测试无继承和实现的匿名类
 */
fun test1() {
    var t = object {
        var show: String = "没有父类的匿名类"
    }
    println(t.show)
}
/**
 * 创建一个父类
 */
open class Test2017529(str: String) {
    public open var v = str
}
/**
 * 定义一个接口
 */
interface Test1Interface {
    fun test()
}

输出结果:

创建继承方式延伸的匿名内部类
创建接口延伸的匿名内部类
没有父类的匿名类

可知:

创建匿名类的方式var t=object:父类(),接口名
注意点

  • 若是父类中有构造方法,创建匿名类时候,必需传递参数
  • 匿名类拥有多个父类时候,父类之间用逗号隔开
  • 可以创建不继承父类,也不实现接口的匿名类

对象声明


在Kotlin声明一个单例类的对象,用object修饰。在开发中经常用到的单例模式。

package com.xingen.kotlin.day2017529

fun main(args: Array<String>) {
    TestListener.test()
}
/**
 * object关键字声明一个单例的对象
 *
 *  对象声明与对象表达式区别:
 *
 *    对象声明和变量声明一样,不能作为右值赋给等号左边。
 *
 *  调用方式:
 *    1. 类名.属性名
 *    2. 类名.方法()
 */
object  TestListener:Test1Interface {
    override fun test() {
      println("object声明类对象")
    }
}

输出结果:

object声明类对象

可知:

  • 注意:对象声明不可以是局部的(比如不可以直接在函数内部声明),但可以在其它对象的声明或非内部类中进行内嵌入

伴随对象


package com.xingen.kotlin.day2017529

fun main(args: Array<String>) {
    Day2017529.test()
}
class Day2017529{
    /**
     * companion object声明一个伴生对象,对象名可以省略。
     * 伴随对象中的方法可以作为静态方法使用
     *
     *  @JvmStatic标记,真实的静态方法和静态属性
     */
    companion object Test{
       @JvmStatic fun  test(){
            println("伴随对象的静态使用")
        }
    }
}

输出结果:

伴随对象的静态使用

可知:

  • companion 标记类内部中的对象声明,即修饰伴随对象,对象的名字可以省略。
  • 使用@JvmStatic的注解,可以使用多个伴随对象成为真实的静态方法和属性。

对象表达式,对象的声明,伴随对象之间的区别


  • 对象表达式是,在使用的地方立即初始化,且执行的

  • 对象声明是懒加载的,需要用到访问调用时初始化的

  • 伴随对象是对应的类加载时候,进行初始化的,和Java中的静态初始对应的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值