前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kotlin---类与构造函数

Kotlin---类与构造函数

作者头像
None_Ling
发布2018-12-06 14:18:39
9690
发布2018-12-06 14:18:39
举报
文章被收录于专栏:Android相关Android相关

Kotlin中的类定义与Java中无异,只是在Kotlin中,再也没有static所声明的静态内部类。

代码语言:javascript
复制
// 创建对象
var childNest: ChildNest = ChildNest()
// 类定义
class ChildNest {
    fun function() {

    }
}

构造函数

Kotlin中类的构造函数以及属性初始化的方式有多种。

  • 在类名后加入构造函数参数,并且在类内部进行初始化或者使用init代码块进行初始化
代码语言:javascript
复制
class Child(name: String, age: Int = 18) {
    var mName: String = name
    var mAge: Int = age

    init {
        mName = name
        mAge = age
    }
}
  • 也可以通过与Java、C++中的构造函数一样,来为成员变量赋值,并且构造函数可以重载,不过还是建议带默认值使用一个构造函数
代码语言:javascript
复制
class Child {
    var mName: String
    var mAge: Int

    constructor(name: String, age: Int = 18) {
        mName = name
        mAge = age
    }

    constructor(name: String, age: Int = 18, num: Int) {
        mName = name
        mAge = age
    }
}

属性的set/get方法

通常在外部设置成员属性的时候需要有一些条件判断,或者是修改操作,我们可以在属性后定义set/get方法来进行判断与修改

其中,set/get方法中会有field来代表对应的属性,对field进行操作即可。而Kotlin称之为Backing Fields

代码语言:javascript
复制
open class Child(name: String, age: Int = 18) {
    var mName: String = name
        get() : String {
            Log.e("Child", "Child get Called$field");
            return field.replace('b', 'c', true)
        }
        set(value) {
            Log.e("Child", "Child SetName Called$value")
            field = value.toUpperCase()
        }
    var mAge: Int = age
}

而外部访问则直接使用.来访问即可

代码语言:javascript
复制
var c: Child = Child(name = "bob", age = 30)
Log.e("tag","C:${c.mName}")

默认Kotlin就为属性提供来set/get方法,如果不需要修改的话,则不需要重写

访问描述符

在Kotlin中仍然具有privateprotectedpublic的访问描述符。默认public,所以不需要写。

  • private:本类可以访问
  • protected:子类可以访问
  • public:所有类都可以访问
代码语言:javascript
复制
class Child(name: String, age: Int = 18) {
    var mName: String = name
    var mAge: Int = age


    private fun functionPrivate() {
        Log.e("Child", "functionPrivate Called")
    }

    protected fun functionProtected() {
        Log.e("Child", "functionProtected Called")
    }

    fun functionPublic() {
        Log.e("Child", "functionPublic Called")
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.11.05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 构造函数
  • 属性的set/get方法
  • 访问描述符
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档