[Kotlin]Kotlin OOP(3)-演算子過負荷、委任
演算子のオーバーロードこの演算子+、-、*、/および%を再ロードできます. オーバーロード時演算子名プラス、マイナス、次、div、rem 単項演算子 unaryPlus, unaryMinus, not, inc, dec 比較演算子 equals, compareTo ソース例:許俊英教授github継承と似ていますが、異なります. 継承は強合併、委任は弱合併 継承不可または委任可能 委任するクラスと同じインタフェースを実装する必要があります 委任モードは、委任(継承)するオブジェクトをメンバーとして作成し、特定のメソッドを呼び出すときに委任オブジェクトを呼び出す方法で転送(呼び出す)することによって作成されます. 代理オブジェクトの各メソッドについて、 を転送するための新しいメソッドを作成します.
ソース例:許俊英教授github https://kotlinlang.org/docs/delegation.html#overriding-a-member-of-an-interface-implemented-by-delegation https://github.com/jyheo/kotlin-tutorial/blob/master/kotlin-OOP.md
data class Complex(val real: Double, val img: Double) {
operator fun plus(other: Complex): Complex
= Complex(real + other.real, img + other.img)
override fun toString(): String = "$real+${img}i"
}
operator fun Complex.minus(other: Complex): Complex
= Complex(real - other.real, img - other.img)
fun main() {
val c1 = Complex(1.0, 1.0)
val c2 = Complex(2.0, 2.0)
val c3 = c1 + c2
println(c3) // 3.0 + 3.0i
println(c3 == Complex(3.0, 3.0)) // true
}
委任するby
キーワードに委任interface Base {
fun print()
fun printHello()
}
class BaseImpl(val x: Int) : Base {
override fun print() { print(x) }
override fun printHello() { println("Hello")}
}
class Derived(val b: Base) : Base by b {
override fun print() {
b.print()
println("ok")
}
}
// fun main() { // kts에서 작성
val b = BaseImpl(10)
val d = Derived(b)
d.print() // 10ok
d.printHello() // Hello // Derived 에서 구현하지 않았으나 b의 것을 사용
// }
参考資料Reference
この問題について([Kotlin]Kotlin OOP(3)-演算子過負荷、委任), 我々は、より多くの情報をここで見つけました https://velog.io/@dogakday/Kotlin-Kotlin-OOP-3-연산자-오버로딩-위임テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol