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!")
}
}