关键字 operater
1>任何类可以定义或者重载父类的基本运算符
2>通过运算符的函数名重载
3>对于参数个数的要求,对参数,返回值类型不作要求
运算符重载不能太随便
这点是java没有的,java的小伙伴羡慕嫉妒恨吧
package com.testOperaters
/**
* Created by jingwen on 19/4/14.
*
Kotlin 运算符重载
关键字 operater
1>任何类可以定义或者重载父类的基本运算符
2>通过运算符的函数名重载
3>对于参数个数的要求,对参数,返回值类型不作要求
运算符重载不能太随便
这点是java没有的,java的小伙伴羡慕嫉妒恨吧
*/
class ComplexNumber(var real: Double, var imaginary: Double) {
/**
* 参数 ComplexNumber
*/
operator fun plus(other: ComplexNumber): ComplexNumber {
return ComplexNumber(real + other.real, imaginary + other.imaginary)
}
operator fun plus(other: Int): ComplexNumber {
return ComplexNumber(real + other, imaginary);
}
override fun toString(): String {
return "$real+${imaginary}i"
}
}
fun main(args: Array<String>) {
var a: ComplexNumber = ComplexNumber(12.0, 11.0)
var b: ComplexNumber = ComplexNumber(9.0, 2.0)
var c = a + b//此时的+号代表ComplexNumber.plus
var d = a + 1;//ComplexNumber +Int
println(a)
println(b)
println(c)
println(d)
}
执行结果:
12.0+11.0i
9.0+2.0i
21.0+13.0i
13.0+11.0i
Process finished with exit code 0
中缀表达式:自定义的运算符 on 使用infix修饰不能使用operator
package com.testOperaters
/**
* Created by jingwen on 19/4/14.
*/
class Person{
/**
* 这种特殊的运算符重载, 只能有一个参数,且使用infix修饰,不能使用operator修饰
*/
infix fun on(any:Any):Boolean{
if(any.toString() == "earth"){
return true
}
if(any.toString() == "sun"){
return false
}
return true
}
}
fun main(args: Array<String>) {
var arrays:Array<String> = arrayOf("jingwen","zhulina","chengcheng","suanwen")
//
println("zhunlina 在数组里吗?")
println("zhulina" in arrays)
println("刘亦菲 在数组里吗?")
println("刘亦菲" in arrays)
//on不是定义好的操作符,我们可以自己定义,比java强吧?
var person:Person = Person()
println("人在地球上面吗")
println(person on "earth")
}
执行结果:
zhunlina 在数组里吗?
true
刘亦菲 在数组里吗?
false
人在地球上面吗
true
Process finished with exit code 0