kotlin自学第三天

1.kotlin里面的顶层函数和熟悉相当于java里面的静态函数,就是直接把函数跟熟悉写在顶层的类外面,其他地方可以直接用

package com.project.test
fun joinTestStaticString() : String{
    for (i in 0..3){
        numberCount = i ;
    }
    return  "static_string $numberCount"
}


var numberCount = 0;

--------------

fun main(args: Array<String>) {
    
        println(joinTestStaticString())
}

------

控制台输出 static_string 3


顶层函数和方法不属于任何一个类 ,可以直接调用

const val NUMBER :Int = 0;  //相当于java的 public static final int NUMBER = 0 ;
2.给别人的类添加方法或者属性

fun String.getLastChar() : Char = this.get(this.getLength - 1)   这个表示我给String类添加了一个叫getLastChar()的方法,返回值是Char 等号右边的意思是获得当前最后一个Char  我把上面的参数拿下来

 println(joinTestStaticString().getLastChar())  
输出最后一个字符是 3 ,可以给任何类添加方法 
 
fun Student.sayHello() : String {
    return "${this.name} sayHello"
}
这个表示我给一个Student类添加了一个
sayHello()方法,返回值为String

这些方法都是写在顶部的 ,可以给所有的类添加方法 

使用的话需要导入当前文件所在的包名,同样也可以用as 来修改名称 

import com.project.test.sayHello as hello 
把上面的sayHello方法修改成为hello方法 ,使用的时候直接通过Student对象拿出来即可,

在JAVA中调用就跟静态类一样

char hello = StaticStringKt.lastChar("Hello");
 
StaticStringKt.sayHello(new Student("xm", 22, "男", "sh"));

StaticStringKt是文件名  

3.类的继承重写 

父类要加上open  需要重写的方法也需要加上open 这样子类才能拿到父类需要给子类重写的类

//父类
open class ParentClass{

  open  fun  onClick() = println("parent click")

}

//子类  

// ParentClass()需要加括号,表示已经构建了这个对象  如果是接口则不需要加括号  重写的方法需要加override  

class ChildClass : ParentClass() {

    override fun onClick() {
        println("child click")
        super.onClick()
    }
}
--------

调用   父类引用指向子类对象   ,会调用子类的方法,重写了 

val testClass : ParentClass  = ChildClass();
testClass.onClick();
输出child click

parent click

-----

如果在顶部添加了扩展方法,方法名字取的一样 ,则不会重写父类的扩展方法 

fun ParentClass.onStop() = println("parent stop")
fun ChildClass.onStop() = println("child stop")
----------
val testClass : ParentClass  = ChildClass();
testClass.onStop();

输出  parent stop   

总结,父类类里面的方法如果暴露出来是可以重写的,外部添加的扩展方法不支持重写,还有如果内部函数跟扩展函数重名,则会优先调用内部函数

4.给类动态添加属性

 var StringBuild.addChar : Char  

        get() = get(length -1)

        set(value : Char){

                this.append(value)

         }

-----

val stringBuilder = StringBuilder("kotlin")
stringBuilder.addChar = 'n';
stringBuilder.addChar = 'b';
println(stringBuilder.toString())

-----

输出kotlinnb

给StringBuild类动态添加了一个叫addChar 的属性  ,里面的get() set()方法必须要写 

5.listof arrayListOf.... 等 都是在java的基础上新加的扩展函数    vararg表示不限制参数的数量

/**
 * Returns a new [ArrayList] with the given elements.
 * @sample samples.collections.Collections.Lists.arrayList
 */
public fun <T> arrayListOf(vararg elements: T): ArrayList<T>
        = if (elements.size == 0) ArrayList() else ArrayList(ArrayAsCollection(elements, isVarargs = true))

动态的给Student类添加了一个增加学生的方法 vararg不限制参数个数
fun  Student.addStudents(vararg student : Student) : ArrayList<Student> {
        val arrayList = ArrayList<Student>()
        if (student.size == 0)arrayList else  arrayList.addAll(student)

    return  arrayList;
}
----->>>

val student = Student("xm", 11, "男", "sh")
val arrayListOf = arrayOf(student, student)
val addStudents = student.addStudents(student, student, student, *arrayListOf);
for (stu in addStudents){
    println(stu.toString())
}
输出Student{name='xm', age=11, sex='男', address='sh'}
Student{name='xm', age=11, sex='男', address='sh'}
Student{name='xm', age=11, sex='男', address='sh'}
Student{name='xm', age=11, sex='男', address='sh'}
Student{name='xm', age=11, sex='男', address='sh'}
在参数vararg里面 用*加参数集合 可以一起放进去处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值