Kotlin类和对象

1-类的定义

类的定义常见三种形式

class ClassTest {
}
class Empty  //空类
class ClassOne(){
    
}

2-属性

2.1-属性的定义

class ClassTwo{
    //属性定义
    var name:String = "chao"//可变
    val city:String = "sh"//不可变

    val obj = ClassTwo() // Kotlin 中没有 new 关键字

    public fun test(){
        obj.city  // 属性的调用
    }
}

2.2-getter和setter

class Person {
    var name: String = "CHAO"
        get() = field.toLowerCase()
        set

    var no: Int = 10
        get() = field // 后端变量
        set(value) {
            if (value < 10) {
                field = value
            } else {
                field = 0
            }
        }
}
fun main(){
    var p : Person = Person()
    p.name = "CHAO"
    println("name:${p.name}") //name:chao

    p.no = 7
    println("no:${p.no}") //no:7

    p.no = 11
    println("no:${p.no}")//no:0
}

3-构造器

主构造函数和次构造函数的使用如下:

class ConstructorTest  constructor(name: String) {  // 主构造函数
    // 大括号内是类体构成
    var url: String = "http://www.baidu.com"
    var country: String = "CN"
    var siteName = name

    init {
        println("初始化网站名: ${name}")
    }
    // 次构造函数
    constructor (name: String, alexa: Int) : this(name) {
        println("Alexa 是 $alexa")
    }

    fun printTest() {
        println("我是类的函数")
    }
}

fun main(args: Array<String>) {
    val ct =  ConstructorTest("百度", 100)
    println(ct.siteName)
    println(ct.url)
    println(ct.country)
    ct.printTest()
}

输出结果:

初始化网站名: 百度
Alexa 是 100
百度
http://www.baidu.com
CN
我是类的函数

4-类的修饰符

 

  • classModifier: 类属性修饰符,标示类本身特性。

    abstract    // 抽象类  
    final       // 类不可继承,默认属性
    enum        // 枚举类
    open        // 类可继承,类默认是final的
    annotation  // 注解类
  • accessModifier: 访问权限修饰符

    private    // 仅在同一个文件中可见
    protected  // 同一个文件中或子类可见
    public     // 所有调用的地方都可见
    internal   // 同一个模块中可见

5-其他特殊类

抽象类,嵌套类,嵌套内部类,匿名内部类

5.1-抽象类

//抽象类
abstract class AbstractClasa {
    abstract fun f()
}

5.2-嵌套类

//嵌套类
class Outer {                  // 外部类
    private val bar: Int = 1
    class Nested {             // 嵌套类
        fun foo() = 2
    }
}

fun main(args: Array<String>) {
    val demo = Outer.Nested().foo() // 调用格式:外部类.嵌套类.嵌套类方法/属性
    println(demo)    // == 2
}

5.3-嵌套内部类

//嵌套内部类
class OuterTest {
    private val bar: Int = 1
    var v = "成员属性"
    /**嵌套内部类**/
    inner class Inner {
        fun foo() = bar  // 访问外部类成员
        fun innerTest() {
            var o = this@OuterTest //获取外部类的成员变量
            println("内部类可以引用外部类的成员,例如:" + o.v)
        }
    }
}
fun main(args: Array<String>) {
    val demo = OuterTest().Inner().foo()
    println(demo) //   1
    val demo2 = OuterTest().Inner().innerTest()
    println(demo2)   // 内部类可以引用外部类的成员,例如:成员属性
}

5.4-匿名内部类

//匿名内部类
class Test {
    var v = "成员属性"

    fun setInterFace(test: TestInterFace) {
        test.test()
    }
}
interface TestInterFace {
    fun test()
}

fun main(args: Array<String>) {
    var test = Test()

    /**
     * 采用对象表达式来创建接口对象,即匿名内部类的实例。
     */
    test.setInterFace(object : TestInterFace {
        override fun test() {
            println("对象表达式创建匿名内部类的实例")
        }
    })
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值