Middle
Πότε πρέπει να χρησιμοποιείτε μια διεπαφή και πότε μια αφηρημένη κλάση;
sobes.tech AI
Απάντηση από AI
Χρησιμοποιούμε μια αφηρημένη κλάση για τη δημιουργία βασικής λειτουργικότητας και γενικής κατάστασης, την οποία μπορούν να κληρονομήσουν οι υποκλάσεις. Είναι κατάλληλη όταν υπάρχουν κοινές μέθοδοι με υλοποίηση και μέθοδοι που πρέπει να υπερισχύσουν. Η αφηρημένη κλάση μπορεί να έχει πεδία και κατασκευαστές.
// Αφηρημένη κλάση
abstract class Animal {
String name;
public Animal(String name) {
this.name = name;
}
abstract void makeSound(); // Αφηρημένη μέθοδος
void eat() { // Μέθοδος με υλοποίηση
System.out.println(name + " τρώει.");
}
}
Χρησιμοποιούμε μια διεπαφή για να ορίσουμε μια σύμβαση που περιγράφει ένα σύνολο μεθόδων που πρέπει να υλοποιηθούν από τις κλάσεις. Είναι κατάλληλη για την επίτευξη πολλαπλής συμπεριφοράς (πολλαπλή κληρονομικότητα λειτουργικότητας). Η διεπαφή δεν μπορεί να έχει κατάσταση (πεδία στιγμής, εκτός από σταθερές) και κατασκευαστές (πριν από το Java 8).
// Διεπαφή
interface Flyable {
void fly(); // Αφηρημένη μέθοδος
}
Πίνακας σύγκρισης διαφορών:
| Χαρακτηριστικό | Αφηρημένη κλάση | Διεπαφή |
|---|---|---|
| Τύπος μελών | Πεδία, αφηρημένες και συγκεκριμένες μέθοδοι, κατασκευαστές | Σταθερές, αφηρημένες μέθοδοι (κατά προεπιλογή), στατικές και default μέθοδοι (από Java 8) |
| Υλοποίηση μεθόδων | Μπορεί να έχει μεθόδους με υλοποίηση | Μόνο αφηρημένες μέθοδοι μέχρι Java 8, από Java 8 - static και default |
| Κατάσταση | Μπορεί να έχει κατάσταση (πεδία) | Δεν μπορεί να έχει κατάσταση (πεδία στιγμής) |
| Κληρονομικότητα | Μονογονεϊκή κληρονομιά | Πολλαπλή υλοποίηση |
| Χρήση | "είναι" (is-a) - βασικός τύπος | "έχει" (has-a) - συμβόλαιο συμπεριφοράς |