Sobes.tech
Junior

Πώς λειτουργούν οι λέξεις-κλειδιά 'super' και 'this' στο Kotlin;

sobes.tech AI

Απάντηση από AI

Το this αναφέρεται στο τρέχον στιγμιότυπο της κλάσης ή στον παραλήπτη μιας έκφρασης lambda. Χρησιμοποιείται για να δηλώσει ρητά ένα μέλος της κλάσης ή μια αναφορά στο τρέχον αντικείμενο όταν υπάρχει ασάφεια (π.χ., όταν μια τοπική μεταβλητή έχει το ίδιο όνομα).

Το super χρησιμοποιείται για να καλέσει μεθόδους ή να αποκτήσει πρόσβαση σε ιδιότητες της γονικής κλάσης. Εφαρμόζεται όταν χρειάζεται να χρησιμοποιήσετε την υλοποίηση της γονικής κλάσης αντί για την υπερκαθορισμένη υλοποίηση στην τρέχουσα κλάση.

Παραδείγματα:

class MyClass(val value: Int) {
    fun printValue() {
        println(this.value) // Ρητή χρήση του this για πρόσβαση στην ιδιότητα
    }
}

open class Parent {
    open fun greet() {
        println("Γειά από τον γονέα")
    }
}

class Child : Parent() {
    override fun greet() {
        super.greet() // Κλήση της μεθόδου της γονικής κλάσης
        println("Γειά από το παιδί")
    }
}

Όταν χρησιμοποιείται σε συναρτήσεις lambda, το this μπορεί να αναφέρεται στον παραλήπτη της lambda:

fun String.addExclamation(): String {
    return this + "!" // this αναφέρεται στη συμβολοσειρά παραλήπτη
}

fun main() {
    val numbers = listOf(1, 2, 3)
    val sum = numbers.sum() // sum είναι μια επέκταση συνάρτησης, το this μέσα αναφέρεται στη λίστα numbers
    println(sum)
}

Για την επίλυση ασάφειας, όταν έχετε εσωτερικές κλάσεις ή lambdas με παραλήπτες, μπορείτε να χρησιμοποιήσετε τον εξειδικευμένο this (this@ClassName ή this@label):

class A { // αυθαίρετη ετικέτα @A
    inner class B { // αυθαίρετη ετικέτα @B
        fun Int.foo() { // αυθαίρετη ετικέτα @foo
            val a = this@A // αναφορά σε μια παρουσίαση A
            val b = this@B // αναφορά σε μια παρουσίαση B
            val c = this // αναφορά στην παρουσίαση Int, παραλήπτης της συνάρτησης foo
            val c1 = this@foo // αναφορά στην παρουσίαση Int, παραλήπτης της συνάρτησης foo
        }
    }
}