前言
上一篇文章介绍了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中单继承,多实现的机制。但是没有了extends和implements关键字,写法更加简单化,不管是继承类还是实现接口,通过一个冒号即可,如果是继承类和实现接口都存在,则只需要通过逗号分隔。
class SplashActivity : BaseActivity<SplashContact.presenter>(), SplashContact.view {
}
2-4.类中其他
Kotlin中声明属性,只用通过var和val(常量)即可。引用属性的话和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一样,没有什么特别的用法。这里介绍的不是十分的全面,也会在后面的博文中慢慢的作补充。