Kotlin---类与构造函数

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")
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android机器圈

SharedPreferences 存List集合,模拟数据库,随时存取

PS:SharedPreferences只要稍微学过一点就会用,他本身通过创建一个Editor对象,来存储提交,而editor可以存的格式为 ? 他里面可以存一...

37980
来自专栏拂晓风起

wchar_t*,wchar_t,wchat_t数组,char,char*,char数组,std::string,std::wstring,CString 以及system("command")

23130
来自专栏desperate633

Java Generic 自定义泛型如何自定义泛型自定义泛型的边界共变性,逆变性泛型对象的比较

考虑我们要实现了一个节点对象,这个对象可以自定义类型,我们可以用泛型语法进行如下的定义:

8910
来自专栏菩提树下的杨过

java:POI导出excel

POI是一个开源项目,专用于java平台上操作MS OFFICE,企业应用开发中可用它方便导出Excel. 下面是使用示例: 1、maven中先添加依赖项 1 ...

37260
来自专栏一个会写诗的程序员的博客

定义一个有用的 MyBaseException

10240
来自专栏河湾欢儿的专栏

判断语句

算术运算符:+ - * / % ++ -- 一元运算符:++ -- ! 逻辑运算符:&||! 比较运算符 == === != > < >= <= ...

7710
来自专栏一个会写诗的程序员的博客

《Kotlin极简教程》第五章 Kotlin面向对象编程(OOP)一个OOP版本的HelloWorld构造函数传参Data Class定义接口&实现之写pojo bean定一个Rectangle对象封

We frequently create a class to do nothing but hold data. In such a class some s...

26340
来自专栏kalifaの日々

Unity 3D学习笔记之C#知识储备

18630
来自专栏ml

uva----(10794) A Different Task

 A Different Task  The (Three peg) Tower of Hanoi problem is a popular ...

29060
来自专栏技术之路

Windows数据类型

 WORD:16位无符号整形数据 DWORD:32字节无符号整型数据(DWORD32) DWORD64:64字节无符号整型数据 INT:32位有符号整型数据类型...

17960

扫码关注云+社区

领取腾讯云代金券