Μια διεπαφή είναι ένας τύπος που περιέχει μέλη τα οποία ορίζουν μια ομάδα σχετιζόμενης λειτουργικότητας. Απομακρύνει τις χρήσεις μιας κλάσης από την υλοποίηση, επιτρέποντας πολλαπλές διαφορετικές υλοποιήσεις ή υποστήριξη για κάποια γενική συμπεριφορά, όπως μορφοποίηση, σύγκριση ή μετατροπή.
Η σύνταξη μιας διεπαφής είναι παρόμοια με αυτήν μιας κλάσης, με τη διαφορά ότι οι μέθοδοι εμφανίζονται μόνο ως υπογραφή και δεν παρέχεται σώμα.
public interface Language {
String getLanguageName();
String speak();
}
public class ItalianTraveller implements Language, Cloneable {
// from Language interface
public String getLanguageName() {
return "Italiano";
}
// from Language interface
public String speak() {
return "Ciao mondo";
}
// from Cloneable interface
public Object clone() {
ItalianTraveller it = new ItalianTraveller();
return it;
}
}
Όλες οι λειτουργίες που ορίζει η διεπαφή πρέπει να υλοποιούνται από την κλάση που την υλοποιεί.
Οι διεπαφές συνήθως περιέχουν μεθόδους στιγμιοτύπων.
Ένα παράδειγμα διεπαφής που βρίσκεται στη Βιβλιοθήκη Κλάσεων της Java, εκτός από το Cloneable που παρουσιάστηκε παραπάνω, είναι το Comparable<T>.
Η διεπαφή Comparable<T> μπορεί να υλοποιηθεί όπου απαιτείται μια προεπιλεγμένη γενική σειρά ταξινόμησης στις συλλογές.
Σε αυτή την άσκηση θα δουλέψεις λίγο περισσότερο με αυτοκίνητα τηλεχειρισμού.
Ένα πειραματικό αυτοκίνητο αναπτύχθηκε και η πίστα δοκιμών πρέπει να προσαρμοστεί ώστε να χειρίζεται και τα μοντέλα παραγωγής και τα πειραματικά. Οι δύο τύποι αυτοκινήτου έχουν ήδη κατασκευαστεί και πρέπει να βρεις έναν τρόπο να τους χειριστείς και τους δύο στην πίστα δοκιμών.
Επιπλέον, τα αυτοκίνητα παραγωγής αρχίζουν να έχουν κάποια επιτυχία. Ο επικεφαλής της ομάδας θέλει να διατηρήσει το ανταγωνιστικό πνεύμα δημοσιεύοντας μια κατάταξη των αυτοκινήτων παραγωγής.
Πρόσθεσε δύο μεθόδους στη διεπαφή RemoteControlCar:
drive(), που δεν επιστρέφει τίποτα, καιgetDistanceTravelled(), που επιστρέφει ένα int.Στη συνέχεια, κάνε τις κλάσεις ProductionRemoteControlCar και ExperimentalRemoteControlCar να υλοποιούν τη διεπαφή RemoteControlCar.
Αυτό περιλαμβάνει την υλοποίηση όλων των μεθόδων που απαιτεί η διεπαφή.
Κάθε κλήση της .drive() πρέπει να κάνει το αυτοκίνητο να διανύει μια συγκεκριμένη απόσταση:
ProductionRemoteControlCar διανύει 10 μονάδες,ExperimentalRemoteControlCar διανύει 20 μονάδες.Η μέθοδος .getDistanceTravelled() πρέπει να επιστρέφει τον αριθμό των μονάδων που έχει διανύσει το αυτοκίνητο σε όλη τη διάρκεια της ζωής του.
ProductionRemoteControlCar prod = new ProductionRemoteControlCar();
prod.drive();
prod.getDistanceTravelled();
// => 10
ExperimentalRemoteControlCar exp = new ExperimentalRemoteControlCar();
exp.drive();
exp.getDistanceTravelled();
// => 20
Υλοποίησε τη μέθοδο TestTrack.race(RemoteControlCar car) στην οποία τα car κάνουν drive().
TestTrack.race(new ProductionRemoteControlCar());
TestTrack.race(new ExperimentalRemoteControlCar());
// this should execute without an exception being thrown
Υλοποίησε τη διεπαφή Comparable<T> στην κλάση ProductionRemoteControlCar.
Η προεπιλεγμένη σειρά ταξινόμησης των αυτοκινήτων πρέπει να είναι φθίνουσα σειρά νικών.
Υλοποίησε τη στατική μέθοδο TestTrack.getRankedCars() ώστε να επιστρέφει τα αυτοκίνητα που της περνιούνται, ταξινομημένα σε φθίνουσα σειρά αριθμού νικών.
ProductionRemoteControlCar prc1 = new ProductionRemoteControlCar();
ProductionRemoteControlCar prc2 = new ProductionRemoteControlCar();
prc1.setNumberOfVictories(2);
prc2.setNumberOfVictories(3);
List<ProductionRemoteControlCar> unsortedCars = new ArrayList<>();
unsortedCars.add(prc1);
unsortedCars.add(prc2);
List<ProductionRemoteControlCar> rankings = TestTrack.getRankedCars(unsortedCars);
// => rankings.get(0) == prc2
// => rankings.get(1) == prc1
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Java με 26 έννοιες158 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.