Sobes.tech
Junior

Ποιες είναι οι βασικές διαφορές μεταξύ μιας κλάσης και μιας διεπαφής στο Kotlin;

sobes.tech AI

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

  • Κλάση: μπορεί να περιέχει ιδιότητες (καταστάσεις) και συναρτήσεις (συμπεριφορά). Μπορεί να είναι αφηρημένη, ανοιχτή (για κληρονομιά) ή τελική. Οι κατασκευαστές ορίζουν τον τρόπο δημιουργίας αντικειμένων. Υποστηρίζει κληρονομιά από μία μόνο κλάση και πολλαπλή υλοποίηση διεπαφών.
  • Διεπαφή: ορίζει ένα συμβόλαιο συμπεριφοράς που πρέπει να υλοποιούν οι κλάσεις. Μπορεί να περιέχει αφηρημένες δηλώσεις συναρτήσεων και ιδιοτήτων, καθώς και συναρτήσεις με υλοποίηση (Java 8+). Δεν μπορεί να περιέχει καταστάσεις (ιδιότητες με υποστηρικτικό πεδίο). Μια κλάση μπορεί να υλοποιεί πολλές διεπαφές. Δεν έχει κατασκευαστές.

Πίνακας σύγκρισης:

Πτυχή Κλάση Διεπαφή
Κατάσταση Μπορεί να έχει ιδιότητες με τιμή. Δεν μπορεί να έχει ιδιότητες με τιμή (μόνο αφηρημένες).
Κατασκευαστές Μπορούν να υπάρχουν. Δεν υπάρχουν.
Υλοποίηση Μπορεί να παρέχει πλήρη υλοποίηση. Παρέχει μερική ή πλήρη υλοποίηση (με προεπιλεγμένες μεθόδους).
Κληρονομιά Κληρονομεί από μία κλάση. Υλοποιεί πολλές διεπαφές.
Αρχικοποίηση Μπορεί να δημιουργηθεί. Δεν μπορεί να δημιουργηθεί άμεσα.
Τύπος Συγκεκριμένη ή αφηρημένη. Μόνο συμβόλαιο συμπεριφοράς.

Παράδειγμα κλάσης:

class Person(val name: String) { // κλάση με κατασκευαστή και ιδιότητα
    fun greet() {
        println("Hello, my name is $name")
    }
}

Παράδειγμα διεπαφής:

interface Greeter { // διεπαφή με μέθοδο
    fun greet()
}

class EnglishGreeter : Greeter { // κλάση που υλοποιεί τη διεπαφή
    override fun greet() {
        println("Hello!")
    }
}