用AI赚第一桶💰低成本搭建一套AI赚钱工具,源码可二开。 广告
## 创建[伴生对象](https://www.kancloud.cn/alex_wsc/android_kotlin/1318311#companion_object_113) 由于**在Kotlin中没有静态变量**,因此它**使用了伴生对象来替代Java中的静态变量的作用**。**伴生对象是在类加载时初始化,生命周期与该类的生命周期一致。在Kotlin中,定义伴生对象是通过“companion”关键字标识的。** 由于**每个类中有且仅有一个伴生对象,因此也可以不指定伴生对象的名称,并且其他对象可以共享伴生对象**。 伴生对象的语法格式如下: ``` companion object 伴生对象名称(也可以不写,但使用时要用Companion) { 程序代码…… } ``` 由于**伴生对象可以指定名称,也可以不指定名称**,因此在调用伴生对象时分两种情况,具体如下。 * (1)**有名称**:调用方式为“**类名.伴生对象名.成员名**”或“**类名.成员名**”。 * (2)**无名称**:调用方式为“**类名.Companion.成员名**”或“**类名.成员名**”。 示例 ``` fun main(args: Array<String>) { //调用伴生对象中的函数 Company.Factory.sayHello() //第一种调用方式:类名.伴生对象名.成员函数名 Company.sayHello() //第二种调用方式:类名.成员函数名 } class Company { companion object Factory { fun sayHello() { println("我是一个伴生对象,与类相生相伴") } } } ``` 运行结果 ``` 我是一个伴生对象,与类相生相伴 我是一个伴生对象,与类相生相伴 ``` 我们知道Kotlin中成员方法的调用形式是【对象.方法()】。包级别函数的调用形式是【方法()】。那有没有【类.方法()】的形式呢?也就是**类似java里面的静态方法的调用**。答案是有的,**通过companionobject关键字申明的伴生对象,方法或者属性调用的时候就是【类.方法()】、【类.属性】**。 什么是伴生对象呢?也就是伴随在某一个类身上。定义的时候,定义在一个类的内部,参考案例: ![](http://upload-images.jianshu.io/upload_images/7368752-6554c8de39a53ff8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 这里的B就是A的伴生对象,只有在A创建的时候,对象B的实例才会创建。 >[success]伴生对象可以有自己的方法和属性,甚至可以实现接口,继承类。伴生对象内的方法访问可以有【外部类.内部类.方法()】的形式以及【外部类.方法()】。伴生对象内的属性访问可以有【外部类.内部类.属性】的形式以及【外部类.属性】, 参考代码: ![](http://upload-images.jianshu.io/upload_images/7368752-37c3fa766f10ba3c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)