Kotlin基础学习---面向对象(二)

目录

一、方法重载与默认参数

二、扩展成员

三、内部类

四、枚举


一、方法重载与默认参数

Kotlin中的方法重载基本和Java一样,有一点不同的是默认参数的使用。在Java中,如果你想在类中创建一个方法,方法接受一个Int类型的参数,如果不填写参数,默认为-1,你会怎么办?肯定会创建两个方法,一个有参数的,一个没有参数的。但是在Kotlin中只需要一个方法就可以了,使用默认参数的方式,如下代码:

fun main(args: Array<String>) {
    val testClass = TestClass()
    testClass.testFun()
    testClass.testFun(5)
}

class TestClass{
    fun testFun(value:Int=0){
        println("重载方法的参数:$value")
    }
}

输出如下:

重载方法的参数:0
重载方法的参数:5

以上就是默认参数的使用

二、扩展成员

什么是Kotlin中的扩展呢?假如在Java中,我们想给String这个类定义一个新的方法,这个方法添加我们想要的处理逻辑,应该怎么办?我想大家想到的应该是继承,创建一个新的类,继承String,然后写上这个方法。其实在Kotlin中完全不用这样,一个方法就可以解决以上需求,看如下代码:

fun main(args: Array<String>) {
    "this is first String".println()
    "this is second String".print()
}
fun String.print(){
    print(this)
}
fun String.println(){
    println(this)
}

方法printprintln都是我们自定义的方法,而前面的String就是被拓展的类,this表示的就是字符串本身,最后输出的就是打印逻辑。是不是非常神奇,和非常便捷呢。我们还可以这样写:

fun main(args: Array<String>) {
    "String" * 5
}

operator fun String.times(times: Int) {
    for (t in 0 until times) {
        println(this)
    }
}

估计会有很多小伙伴第一次看见这样的写法,如果写过Python的小伙伴的估计会很眼熟。times是操作方*的方法,我们这里把times做成了拓展方法,就有了上面的写法,很神奇吧

三、内部类

非静态内部类和静态内部类

java中也是存在静态内部类非静态内部类的,关于这两个的区别和用法我就不在这里说了,可以百度一下,海量的文章供你参考。那Kotlin中的静态内部类非静态内部类是如何写的呢?我们看代码:

class OuterClass {
    //非静态内部类
    inner class InnerClass
    //静态内部类
    class staticInnerClass
}

虽然代码就几行,但是我绝对没有糊弄事~。我们这里就是简单的表达一下,没有写成员变量,所以显得很精简了。静态内部类非静态内部类的区别就在inner这个关键字上,带inner的类是非静态的,不带inner的类是静态的,就是这么简单。

匿名内部类

匿名内部类是Java中常用的了,在Kotlin中如何使用匿名内部类呢?我们从代码中分析,我写一个简单的例子

interface OnClickListener {
    fun onClick();
}

class Test constructor(onClickListener: OnClickListener)

fun main(args: Array<String>) {
    var test = Test(object : OnClickListener {
        override fun onClick() {
            TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
        }
    })
}

首先我写了一个接口类,也就是类型为interface的类,包含了一个方法onClick();之后有写了一个名为Test的测试类,构造器接收一个类型为刚刚创建的接口类OnClickListener;在main方法中创建Test类的对象,我们可以看见,在创建Test对象的构造方法中实现了OnClickListener这个类,我们注意到前面有一个object关键字,这个就是匿名内部类的关键。

四、枚举

Kotlin中的枚举类型和Java中的枚举类型差不多,我们还是从代码入手:

enum class EnumClass{
    ENUM1,ENUM2,ENUM3
}

fun main(args: Array<String>) {
    println(EnumClass.ENUM1.ordinal)
    println(EnumClass.ENUM2.ordinal)
    println(EnumClass.ENUM3.ordinal)
    EnumClass.values().map(::println)
}

其实枚举类型还是比较简单,我们先创建了一个枚举类EnumClass,其中有三个枚举成员;我们看main方法的代码,其中ordinal是枚举成员在枚举类的索引,是从0开始的。values().map返回了枚举类型的map类型。东西就是这么多。因为我平时使用int类型比较多,枚举用的还是比较少,如果之后用到了,再来补充

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值