kotlin学习之对象(九)
目录
- 1. 对象的声明及原理
- 2. 伴生对象
- 3. 匿名内部类
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()
}
- 如果超类型有一个构造函数,则必须传递适当的构造函数参数给它。 多个超类型可以由跟在冒号后面的逗号分隔的列表指定,还可以覆盖属性和方法。
open class A(x: Int) {public open val y: Int = x
}interface B { …… }val ab: A = object : A(1), B {override val y = 15
}
- 如果我们只需要“一个对象而已”,并不需要特殊超类型,那么我们可以简单地写:
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学习之对象(九)相关推荐
- Kotlin学习历程——对象声明与伴生对象
Kotlin语言中文站 对象声明 如下代码写法称为对象声明: object UserInfoManager {//用户类型val userType : Int = 0//获取用户登录信息fun get ...
- kotlin学习目录
目录 kotlin学习之基础(一) kotlin学习之函数(二) kotlin学习之类(三) kotlin学习之类的扩展(四) kotlin学习之密封类(五) kotlin学习之嵌套类和内部类(六) ...
- Kotlin 学习笔记(八)—— Kotlin类与对象之接口
Kotlin 学习笔记(八)-- Kotlin类与对象之接口 Kotlin学习笔记系列教程 Kotlin 学习笔记(一)-- 概述.学习曲线.开发工具.参考资料 Kotlin 学习笔记(二)-- 基础 ...
- 线程与内核对象的同步——Windows核心编程学习手札之九
线程与内核对象的同步 --Windows核心编程学习手札之九 用户方式下的线程同步机制具有速度快的特点,但有其局限性,对于许多应用程序来说,并不合适.例如,互锁函数家族只能在单值上运行,根本无法使线程 ...
- Kotlin 学习笔记(七)—— Kotlin类与对象之属性与字段
Kotlin 学习笔记(七)-- Kotlin类与对象之属性与字段 Kotlin学习笔记系列教程 Kotlin 学习笔记(一)-- 概述.学习曲线.开发工具.参考资料 Kotlin 学习笔记(二)-- ...
- Polyworks脚本开发学习笔记(十九)-将数据对象与参考对象对齐的方法
Polyworks脚本开发学习笔记(十九)-将数据对象与参考对象对齐的方法 把开发手册理了一遍,发现还有几个点没有记录下来,其中一个就是使用点对的粗对齐和使用参考目标的精确对齐.为了把这个学习笔记凑够 ...
- Python学习笔记(九):类和对象
Python学习笔记(九):类和对象 关于类和对象 Python学习笔记(九):类和对象 一.类和对象 类的定义 类的实例化 类对象的使用 二.self用法 三.类方法 实例方法 类方法 静态方法 静 ...
- Kotlin学习笔记——类和对象
推荐kotlin学习书籍 下载链接: https://pan.baidu.com/s/19b5WYDD3Yqh1CAsRvpUsqQ 提取码获取方式:扫描关注下面微信公众号,回复关键字: kotlin ...
- Spring MVC 学习总结(九)——Spring MVC实现RESTful与JSON(Spring MVC为前端提供服务)...
Spring MVC 学习总结(九)--Spring MVC实现RESTful与JSON(Spring MVC为前端提供服务) 目录 一.JSON 1.1.概要 1.2.使用ModelAndView ...
最新文章
- linux php安装RabbitMq扩展
- nexys3使用笔记1
- 在 Java 的反射中,Class.forName 和 ClassLoader 的区别
- php什么版本好玩_新区传奇世界手游10点准时开放丨两个版本
- 太原理工大学linux与python编程r实验报告_太原理工大学算法设计与分析实验报告...
- python案例源码_【python】python实例集一
- Flutter快速构建集美观与⾼性能于⼀体的APP
- 前端:JS/32/form对象(表单)(form对象的属性,方法和事件),受返回值影响的两个事件(onclick事件,onsubmit事件),获取表单的元素对象的三种方式,表单的提交和验证方法总结
- Java基础学习总结(146)——开发人员日志实践规范
- 打印快递面单pdf_如何开通使用拼多多电子面单?
- 14.5【结构体指针编程】小科同学学习了数组和结构体,认真进行编程练习,顺利完成了老师布置的20道课外编程题后,他想起了科比20年的职业生涯数据。
- NAND flash和NOR flash的区别详解
- 超炫酷生日快乐网页源代码_最炫表白网站源码_html生日快乐网站制作
- socket编程常用函数
- Jquery colorbox不错的遮罩
- 年薪120W的架构师简历你见过吗?java程序员该如何达到?
- 级联rc滤波_了解无源RC滤波器,看完这篇你就懂了(二)
- NLP预训练(PTMs)
- Java 8 新特性|Collectors.joining()
- Java线程同步容易犯错的坑
热门文章
- python3爬虫(7)反反爬虫解决方案
- delphi7下安装TMS component
- Flink 架构:三层架构体系、运行时组件
- StackOverflow 上面最流行的 7 个 Java 问题!| 值得一看
- Kafka解惑之时间轮(TimingWheel)
- 以高并发著称的 Go 如何与 MySQL 搭档应对千亿级数据?
- OS- -请求分页系统、请求分段系统和请求段页式系统(一)
- ​来,一起搞AV,LiveVideoStack Meet再启动
- 2023年多播ABR市场将达8亿美元
- 腾讯音视频实验室:基于音视频细分场景的技术创新探索