Το πρόγραμμα είναι σχεδιασμένο με ξεκάθαρη δομή κληρονομικότητας:
Αναπαριστά ένα γενικό όχημα με χαρακτηριστικά:
licensePlate
(String): Αριθμός κυκλοφορίας.model
(String): Μοντέλο οχήματος.year
(int): Έτος κατασκευής.
Παρέχει μεθόδους:
displayInfo()
: Εμφανίζει τις λεπτομέρειες του οχήματος.getType()
: Επιστρέφει τον τύπο του οχήματος (υπερκαλύπτεται στις υποκλάσεις).
- Κληρονομεί από την
Vehicle
. - Προσθέτει το χαρακτηριστικό:
doors
(int): Αριθμός θυρών.
- Υπερκαλύπτει:
displayInfo()
για να συμπεριλάβει τον αριθμό θυρών.getType()
για να επιστρέφει"Car"
.
- Κληρονομεί από την
Vehicle
. - Προσθέτει το χαρακτηριστικό:
hasSidecar
(boolean): Υποδεικνύει αν υπάρχει Πλευρικό τμήμα.
- Υπερκαλύπτει:
displayInfo()
για να συμπεριλάβει πληροφορίες για το Πλευρικό τμήμα.getType()
για να επιστρέφει"Motorcycle"
.
Η κλάση Main
λειτουργεί ως το σημείο εκκίνησης της εφαρμογής και είναι υπεύθυνη για τη διαχείριση πληροφοριών οχημάτων και την αλληλεπίδραση με τον χρήστη.
Παρουσιάζει την κληρονομικότητα και τον πολυμορφισμό μέσω των παρακάτω λειτουργιών:
Η μέθοδος preloadVehicles()
δημιουργεί στιγμιότυπα των Car
και Motorcycle
με διάφορα χαρακτηριστικά:
vehicles.add(new Car("ABC123", "Toyota Corolla", 2020, 4));
vehicles.add(new Motorcycle("XYZ789", "Harley Davidson", 2019, false));
vehicles.add(new Car("DEF456", "Honda Civic", 2021, 2));
Αυτά τα αντικείμενα προστίθενται στη λίστα vehicles, επιδεικνύοντας τη χρήση πολυμορφισμού, καθώς και οι δύο υποκλάσεις αποθηκεύονται σε συλλογή της κλάσης Vehicle.
Το πρόγραμμα καλεί την υπερκαλυμμένη μέθοδο displayInfo()
για κάθε αντικείμενο Vehicle
, διασφαλίζοντας ότι εμφανίζονται οι σωστές λεπτομέρειες ειδικά για κάθε υποκατηγορία:
for (Vehicle vehicle : vehicles) {
addVehicleCard(vehicle); // Εμφανίζει λεπτομέρειες χρησιμοποιώντας το displayInfo()
}
Κάθε υποκλάση παρέχει τις δικές της ειδικές λεπτομέρειες:
Αριθμός θυρών για Car.
Καλάθι για Motorcycle.
Προβολή Όλων των Οχημάτων:
Εμφανίζει όλα τα οχήματα χρησιμοποιώντας τη μέθοδο displayInfo().
Προσθήκη Οχήματος:
Επιτρέπει στους χρήστες να δημιουργήσουν νέα στιγμιότυπα Car ή Motorcycle δυναμικά.
Τα νέα αντικείμενα αποθηκεύονται στη λίστα vehicles.
Αναζήτηση με Βάση τον Αριθμό Κυκλοφορίας:
Αναζητά ένα όχημα βάσει του licensePlate και εμφανίζει τις πληροφορίες του χρησιμοποιώντας τη μέθοδο displayInfo().
Φιλτράρισμα Οχημάτων με Βάση τον Τύπο:
Χρησιμοποιεί τη μέθοδο getType() για να φιλτράρει αντικείμενα Car και Motorcycle, επιδεικνύοντας τον πολυμορφισμό.
Δημιουργία Αντικειμένων Car και Motorcycle:
Στιγμιότυπα και των δύο κλάσεων δημιουργούνται:
Στη μέθοδο preloadVehicles().
Δυναμικά μέσω του GUI με τη λειτουργία "Προσθήκη Οχήματος".
Κλήση Μεθόδων για Εμφάνιση Πληροφοριών Οχημάτων:
Η μέθοδος displayInfo() καλείται για κάθε αντικείμενο:
System.out.println(vehicle.displayInfo());
Διασφαλίζεται ότι οι πληροφορίες εμφανίζονται σωστά, επιβεβαιώνοντας τη λειτουργικότητα της κληρονομικότητας
και των υπερκαλυμμένων
μεθόδων.
- Της χρήσης κληρονομικότητας (
Vehicle
,Car
, καιMotorcycle
κλάσεις). - Της υλοποίησης μεθόδων που επαναπροσδιορίζονται (
displayInfo()
καιgetType()
). - Της παροχής ενός πλήρους γραφικού περιβάλλοντος για τη διαχείριση και την αλληλεπίδραση με πληροφορίες οχημάτων δυναμικά.
- Της σωστής εμφάνισης δεδομένων για κάθε τύπο οχήματος, εξασφαλίζοντας την αποτελεσματική χρήση πολυμορφισμού