目录

  • 1. 对象的声明及原理
  • 2. 伴生对象
  • 3. 匿名内部类

1. 对象的声明及原理

  1. 声明
object RepositoryManager{fun method(){println("I'm in object declaration")}
}

对象声明通过object引入,跟类一样包含属性、方法、初始代码块,但是唯一不同的是不拥有构造方法。就是说这个对象只能创建一次,而且是在声明的时候被创建出来。

相当于Java中的这段代码

class RepositoryManager{private RepositoryManager(){}public static final RepositoryManager INSTANCE = new RepositoryManager();}

即一个类拥有一个静态成员来持有对自己的引用,并且这个静态成员的名称为INSTANCE,当然这个INSTANCE是单例的。在kotlin中我们可以这样使用:

fun main(args: Array<String>) {RepositoryManager.method()
}
  1. 如果超类型有一个构造函数,则必须传递适当的构造函数参数给它。 多个超类型可以由跟在冒号后面的逗号分隔的列表指定,还可以覆盖属性和方法。
open class A(x: Int) {public open val y: Int = x
}interface B { …… }val ab: A = object : A(1), B {override val y = 15
}
  1. 如果我们只需要“一个对象而已”,并不需要特殊超类型,那么我们可以简单地写:
fun foo() {val adHoc = object {var x: Int = 0var y: Int = 0}print(adHoc.x + adHoc.y)
}

2. 伴生对象

Kotlin允许在类中使用companion object创建伴生对象,用伴生对象的成员来代替静态成员:

class Person(val name:String){companion object {val anonymousPerson=Person("Anonymous")fun sayHello(){println("Hello")}}var age=0fun sayName(){println("My name is $name")}
}

用Java表示如下:

public final class Person {private final int age;private final String name;private static final Person anonymousPerson = new Person("Anonymous");public static final Person.Companion Companion = new Person.Companion();public Person(String name) {this.name = name;}// getAge()、setAge()、getName()public final void sayName() {System.out.println("My name is " + this.name);}public static final class Companion {private Companion() {}public final Person getAnonymousPerson() {return Person.anonymousPerson;}public final void sayHello() {System.out.println("Hello")}}
}

使用伴生对象实际上是在这个类内部创建了一个名为Companion的静态单例内部类,伴生对象中定义的属性会直接编译为外部类的静态字段,而函数会被编译为伴生对象的方法。

3. 匿名内部类

func countClicks(window: Window) {var clickCount = 0window.addMouseClickListener(obj: MouseAdapter() {override fun mouseClicked(e: MouseEvent) {clickCount++})
}

和Java不同的是,匿名内部类可以访问到非final的变量,并且修改它的值。

kotlin学习之对象(九)相关推荐

  1. Kotlin学习历程——对象声明与伴生对象

    Kotlin语言中文站 对象声明 如下代码写法称为对象声明: object UserInfoManager {//用户类型val userType : Int = 0//获取用户登录信息fun get ...

  2. kotlin学习目录

    目录 kotlin学习之基础(一) kotlin学习之函数(二) kotlin学习之类(三) kotlin学习之类的扩展(四) kotlin学习之密封类(五) kotlin学习之嵌套类和内部类(六) ...

  3. Kotlin 学习笔记(八)—— Kotlin类与对象之接口

    Kotlin 学习笔记(八)-- Kotlin类与对象之接口 Kotlin学习笔记系列教程 Kotlin 学习笔记(一)-- 概述.学习曲线.开发工具.参考资料 Kotlin 学习笔记(二)-- 基础 ...

  4. 线程与内核对象的同步——Windows核心编程学习手札之九

    线程与内核对象的同步 --Windows核心编程学习手札之九 用户方式下的线程同步机制具有速度快的特点,但有其局限性,对于许多应用程序来说,并不合适.例如,互锁函数家族只能在单值上运行,根本无法使线程 ...

  5. Kotlin 学习笔记(七)—— Kotlin类与对象之属性与字段

    Kotlin 学习笔记(七)-- Kotlin类与对象之属性与字段 Kotlin学习笔记系列教程 Kotlin 学习笔记(一)-- 概述.学习曲线.开发工具.参考资料 Kotlin 学习笔记(二)-- ...

  6. Polyworks脚本开发学习笔记(十九)-将数据对象与参考对象对齐的方法

    Polyworks脚本开发学习笔记(十九)-将数据对象与参考对象对齐的方法 把开发手册理了一遍,发现还有几个点没有记录下来,其中一个就是使用点对的粗对齐和使用参考目标的精确对齐.为了把这个学习笔记凑够 ...

  7. Python学习笔记(九):类和对象

    Python学习笔记(九):类和对象 关于类和对象 Python学习笔记(九):类和对象 一.类和对象 类的定义 类的实例化 类对象的使用 二.self用法 三.类方法 实例方法 类方法 静态方法 静 ...

  8. Kotlin学习笔记——类和对象

    推荐kotlin学习书籍 下载链接: https://pan.baidu.com/s/19b5WYDD3Yqh1CAsRvpUsqQ 提取码获取方式:扫描关注下面微信公众号,回复关键字: kotlin ...

  9. Spring MVC 学习总结(九)——Spring MVC实现RESTful与JSON(Spring MVC为前端提供服务)...

    Spring MVC 学习总结(九)--Spring MVC实现RESTful与JSON(Spring MVC为前端提供服务) 目录 一.JSON 1.1.概要 1.2.使用ModelAndView ...

最新文章

  1. linux php安装RabbitMq扩展
  2. nexys3使用笔记1
  3. 在 Java 的反射中,Class.forName 和 ClassLoader 的区别
  4. php什么版本好玩_新区传奇世界手游10点准时开放丨两个版本
  5. 太原理工大学linux与python编程r实验报告_太原理工大学算法设计与分析实验报告...
  6. python案例源码_【python】python实例集一
  7. Flutter快速构建集美观与⾼性能于⼀体的APP
  8. 前端:JS/32/form对象(表单)(form对象的属性,方法和事件),受返回值影响的两个事件(onclick事件,onsubmit事件),获取表单的元素对象的三种方式,表单的提交和验证方法总结
  9. Java基础学习总结(146)——开发人员日志实践规范
  10. 打印快递面单pdf_如何开通使用拼多多电子面单?
  11. 14.5【结构体指针编程】小科同学学习了数组和结构体,认真进行编程练习,顺利完成了老师布置的20道课外编程题后,他想起了科比20年的职业生涯数据。
  12. NAND flash和NOR flash的区别详解
  13. 超炫酷生日快乐网页源代码_最炫表白网站源码_html生日快乐网站制作
  14. socket编程常用函数
  15. Jquery colorbox不错的遮罩
  16. 年薪120W的架构师简历你见过吗?java程序员该如何达到?
  17. 级联rc滤波_了解无源RC滤波器,看完这篇你就懂了(二)
  18. NLP预训练(PTMs)
  19. Java 8 新特性|Collectors.joining()
  20. Java线程同步容易犯错的坑

热门文章

  1. python3爬虫(7)反反爬虫解决方案
  2. delphi7下安装TMS component
  3. Flink 架构:三层架构体系、运行时组件
  4. StackOverflow 上面最流行的 7 个 Java 问题!| 值得一看
  5. Kafka解惑之时间轮(TimingWheel)
  6. 以高并发著称的 Go 如何与 MySQL 搭档应对千亿级数据?
  7. OS- -请求分页系统、请求分段系统和请求段页式系统(一)
  8. ​来,一起搞AV,LiveVideoStack Meet再启动
  9. 2023年多播ABR市场将达8亿美元
  10. 腾讯音视频实验室:基于音视频细分场景的技术创新探索