美文网首页
Kotlin---类与构造函数

Kotlin---类与构造函数

作者: None_Ling | 来源:发表于2018-11-05 14:30 被阅读10次

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

    // 创建对象
    var childNest: ChildNest = ChildNest()
    // 类定义
    class ChildNest {
        fun function() {
    
        }
    }
    

    构造函数

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

    • 在类名后加入构造函数参数,并且在类内部进行初始化或者使用init代码块进行初始化
    class Child(name: String, age: Int = 18) {
        var mName: String = name
        var mAge: Int = age
    
        init {
            mName = name
            mAge = age
        }
    }
    
    • 也可以通过与Java、C++中的构造函数一样,来为成员变量赋值,并且构造函数可以重载,不过还是建议带默认值使用一个构造函数
    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

    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
    }
    

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

    var c: Child = Child(name = "bob", age = 30)
    Log.e("tag","C:${c.mName}")
    

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

    访问描述符

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

    • private:本类可以访问
    • protected:子类可以访问
    • public:所有类都可以访问
    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")
        }
    }
    

    相关文章

      网友评论

          本文标题:Kotlin---类与构造函数

          本文链接:https://www.haomeiwen.com/subject/yarcxqtx.html