【Android Kotlin】Kotlin的类与对象

前言

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


目录

这里写图片描述

1、权限修饰符

对于类,属性,方法等的访问权限修饰符和Java中的类似,Kotlin提供了privateprotectedinternalpublic四个修饰符。如果不指定具体的修饰符的话,则使用默认的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一样,没有什么特别的用法。这里介绍的不是十分的全面,也会在后面的博文中慢慢的作补充。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值