简约之美Kotlin(三)Kotlin类与对象

前言

上一篇文章介绍了Kotlin的基础知识,本章将介绍Kotlin中的类,对象,接口等相关知识点。


目录

这里写图片描述

1.权限修饰符

对于类,属性,方法等的访问权限修饰符和Java中的类似,Kotlin提供了private(私有)protected(子类)internal(内部)public(公共)四个修饰符。如果不指定具体的修饰符的话,则使用默认的public。

以类中声明的变量修饰符为例:

private     <!--仅在该类内部可见(包括其所有成员)-->

protected   <!--在该类内部以及其子类-->

internal    <!--任何声明该内部类的实例都可见-->

public      <!--声明了该类的实现都可见-->



2.类

2-1.类的声明

Kotlin中声明类和Java一样使用class关键字。

class MainActivity{

}

如果类中没有内容,可以将大括号省略。

<!--类中无内容-->
class MainActivity

类的声明很简单,下面我们将介绍一下类的构造函数。

2-2.类的构造函数

在Java中,类的构造函数可以有多个,且在类中声明。Kotlin给我们提供了一个主构造函数一个或者多个次要构造函数。先来看个声明构造函数的例子。

class Person constructor(name: String) {

}

这就是Kotlin中的主构造函数,它属于类头的一部分,在类名之后声明。当然括号里的就是构造参数。像上述的情况下,如果主构造函数没有权限修饰符的话是可以这样写的:

class Person(name: String) {

}

如果构造函数有权限修饰符,就不能将constructor关键词省略掉,如下。

class ActivityStack private constructor() {

}

这里写图片描述

不像Java可以在构造函数中初始化数据,Kotlin的主构造函数中只能有构造参数的声明,不能有其他的任何代码。如果进入页面时我想初始化一些数据怎么办?Kotlin提供了init关键字为前缀的初始化块中。

这里写图片描述



OK,介绍完主构造函数,来看看次要构造函数是个啥?例子:

class Person {
    constructor(parent: Person) {
        //todo
    }
}

该类是没有主构造函数,通过constructor关键字可以在类中声明它的次要构造函数

class Person(name:String) {

    constructor(name: String,age:Int):this(name){

    }

}

上面例子是在类头声明了主构造函数,如果再声明一个次要构造函数的话,必须要通过this关键字完成主构造函数次要构造函数的委托(没有我的授权你就不能声明!!)。

关于类的构造函数知识就介绍这么多了。类的对象如何实例化呢?

val person= Person()

val Person= Person("Ho0229")

其实本质和Java一样,不过Kotlin里就不用写new 关键字了,这里把构造函数当成一个方法来创建对象。



2-3.类的继承

Kotlin依旧延续了Java中单继承,多实现的机制。但是没有了extendsimplements关键字,写法更加简单化,不管是继承类还是实现接口,通过一个冒号即可,如果是继承类实现接口都存在,则只需要通过逗号分隔。

class SplashActivity : BaseActivity<SplashContact.presenter>(), SplashContact.view {

}



2-4.类中其他

Kotlin中声明属性,只用通过varval(常量)即可。引用属性的话和Java中的方式是一样的。

/**
  * 当前安装包环境是否是Release版本
  */
var IS_RELEASE_VERSION: Boolean? = null

/**
  * 当前安装包环境渠道版本
  */
var CHANNEL: Int? = 0

/**
  * 当前安装包环境版本
  */
var ENVIRONMENT: Int? = 0

重要:Kotlin中是静态这一概念,是没有static关键字的,所以不能像Java一样去声明静态类,静态方法变量等。它提供了companion(伴生) 关键字。其实听名字,伴随class生,就是类创建时它就会存在,和Java中静态概念是一样的。看下我自己项目里使用到:

/*静态变量与方法存放处*/
companion object {

    private var dbOrderDao: DBOrderDao? = null
    /**
      *  @fuction: 获取数据库操作类实例
      *  @params:null
      */
    fun getDaoInstance(): DBOrderDao {
        if (dbOrderDao == null) {
             dbOrderDao = DBOrderDao()
         }
         return dbOrderDao!!
     }
  }

//其他处调用上面获取实例方法
val accessTokenBean = DBOrderDao.getDaoInstance().queryUserInfo()

//声明友盟信息
companion object {
    /*友盟appid*/
    val UMENG_APPID = ".............01udf"

}

//其他处调用上述友盟声明appId
UMConfigure.init(this,AppConst.Companion.UMENG_APPID,"umeng",UMConfigure.DEVICE_TYPE_PHONE,"")



结尾

本篇介绍了Kotlin类中的相关知识点,接口知识和Java一样,没有什么特别的用法。这里介绍的不是十分的全面,也会在后面的博文中慢慢的作补充。

猜你喜欢

转载自blog.csdn.net/qq_17470165/article/details/80721402