Podcast
Questions and Answers
Ποια είναι η σημασία της χρήσης της λέξης-κλειδί static
στη δήλωση ενός γνωρίσματος κλάσης;
Ποια είναι η σημασία της χρήσης της λέξης-κλειδί static
στη δήλωση ενός γνωρίσματος κλάσης;
- Δημιουργεί μόνο ένα αντίγραφο του γνωρίσματος που μοιράζεται από όλα τα αντικείμενα της κλάσης. (correct)
- Εμποδίζει την πρόσβαση στο γνώρισμα από οποιαδήποτε μέθοδο εκτός της κλάσης.
- Δημιουργεί ένα αντίγραφο του γνωρίσματος για κάθε αντικείμενο της κλάσης.
- Δηλώνει ότι το γνώρισμα μπορεί να τροποποιηθεί μόνο από τη μέθοδο κατασκευής.
Σε μια κλάση, πώς μπορείτε να προσπελάσετε ένα static
γνώρισμα εκτός της κλάσης;
Σε μια κλάση, πώς μπορείτε να προσπελάσετε ένα static
γνώρισμα εκτός της κλάσης;
- Χρησιμοποιώντας το όνομα της κλάσης ακολουθούμενο από την τελεία και το όνομα του γνωρίσματος. (correct)
- Δεν είναι δυνατή η προσπέλαση εκτός της κλάσης.
- Μόνο μέσα από τις μεθόδους της κλάσης.
- Χρησιμοποιώντας ένα αντικείμενο της κλάσης ακολουθούμενο από την τελεία και το όνομα του γνωρίσματος.
Τι συμβαίνει όταν ένα γνώρισμα μιας κλάσης δηλωθεί ως final
;
Τι συμβαίνει όταν ένα γνώρισμα μιας κλάσης δηλωθεί ως final
;
- Μπορεί να προσπελαστεί μόνο από την κλάση που το έχει δηλώσει.
- Πρέπει να αρχικοποιηθεί κατά τη δήλωση και δεν μπορεί να αλλάξει η τιμή του. (correct)
- Δεν χρειάζεται να αρχικοποιηθεί.
- Η τιμή του μπορεί να αλλάξει οποιαδήποτε στιγμή.
Ποιος είναι ο πιο αποτελεσματικός τρόπος για να οριστούν σταθερές τιμές σε μια κλάση, ώστε να είναι προσβάσιμες αλλά όχι μεταβλητές;
Ποιος είναι ο πιο αποτελεσματικός τρόπος για να οριστούν σταθερές τιμές σε μια κλάση, ώστε να είναι προσβάσιμες αλλά όχι μεταβλητές;
Τι σημαίνει η δήλωση μιας μεθόδου ως static
;
Τι σημαίνει η δήλωση μιας μεθόδου ως static
;
Ποια είναι η δομή μιας μεθόδου;
Ποια είναι η δομή μιας μεθόδου;
Ποιος είναι ο ρόλος μιας μεθόδου πρόσβασης (getter) σε μια κλάση;
Ποιος είναι ο ρόλος μιας μεθόδου πρόσβασης (getter) σε μια κλάση;
Ποια είναι η λειτουργία της μεθόδου toString()
;
Ποια είναι η λειτουργία της μεθόδου toString()
;
Τι είναι ο κατασκευαστής (constructor) σε μια κλάση;
Τι είναι ο κατασκευαστής (constructor) σε μια κλάση;
Ποια είναι η συνέπεια της κλήσης μιας μεθόδου που επιστρέφει μια τιμή χωρίς να αποθηκεύσετε την τιμή σε μια μεταβλητή;
Ποια είναι η συνέπεια της κλήσης μιας μεθόδου που επιστρέφει μια τιμή χωρίς να αποθηκεύσετε την τιμή σε μια μεταβλητή;
Πώς καλείται μια static
μέθοδος;
Πώς καλείται μια static
μέθοδος;
Τι συμβαίνει όταν ένα αντικείμενο περνάει ως παράμετρος σε μια μέθοδο;
Τι συμβαίνει όταν ένα αντικείμενο περνάει ως παράμετρος σε μια μέθοδο;
Τι συμβαίνει αν ορίσετε έναν κατασκευαστή με παραμέτρους και δεν ορίσετε τον default (χωρίς παραμέτρους) κατασκευαστή;
Τι συμβαίνει αν ορίσετε έναν κατασκευαστή με παραμέτρους και δεν ορίσετε τον default (χωρίς παραμέτρους) κατασκευαστή;
Ποιος είναι ο ρόλος της λέξης-κλειδί this
μέσα σε μια μέθοδο;
Ποιος είναι ο ρόλος της λέξης-κλειδί this
μέσα σε μια μέθοδο;
Σε ποια περίπτωση θα χρησιμοποιούσατε τη λέξη-κλειδί this
μέσα σε έναν κατασκευαστή;
Σε ποια περίπτωση θα χρησιμοποιούσατε τη λέξη-κλειδί this
μέσα σε έναν κατασκευαστή;
Ποιος είναι ο σκοπός της μεθόδου finalize()
στην Java;
Ποιος είναι ο σκοπός της μεθόδου finalize()
στην Java;
Πότε είναι χρήσιμο να ορίσετε τη μέθοδο finalize()
σε μια κλάση;
Πότε είναι χρήσιμο να ορίσετε τη μέθοδο finalize()
σε μια κλάση;
Τι είναι υπερφόρτωση μεθόδων (method overloading);
Τι είναι υπερφόρτωση μεθόδων (method overloading);
Πότε είναι κατάλληλη η χρήση της υπερφόρτωσης μεθόδων;
Πότε είναι κατάλληλη η χρήση της υπερφόρτωσης μεθόδων;
Γιατί η υπερφόρτωση μεθόδων δεν μπορεί να βασίζεται μόνο στον τύπο επιστροφής;
Γιατί η υπερφόρτωση μεθόδων δεν μπορεί να βασίζεται μόνο στον τύπο επιστροφής;
Σε μια κλήση υπερφορτωμένης μεθόδου, πώς ο compiler αποφασίζει ποια έκδοση της μεθόδου θα καλέσει;
Σε μια κλήση υπερφορτωμένης μεθόδου, πώς ο compiler αποφασίζει ποια έκδοση της μεθόδου θα καλέσει;
Τι είναι το casting και πότε χρησιμοποιείται σε σχέση με την υπερφόρτωση μεθόδων;
Τι είναι το casting και πότε χρησιμοποιείται σε σχέση με την υπερφόρτωση μεθόδων;
Σε μια κλάση, μπορείτε να έχετε πολλές μεθόδους με το ίδιο όνομα, αλλά με διαφορετικές λίστες παραμέτρων. Πώς ονομάζεται αυτό;
Σε μια κλάση, μπορείτε να έχετε πολλές μεθόδους με το ίδιο όνομα, αλλά με διαφορετικές λίστες παραμέτρων. Πώς ονομάζεται αυτό;
Ποια είναι η διαφορά μεταξύ υπερφόρτωσης (overloading) και επικάλυψης (overriding) μεθόδων;
Ποια είναι η διαφορά μεταξύ υπερφόρτωσης (overloading) και επικάλυψης (overriding) μεθόδων;
Ποιος είναι ο σκοπός της χρήσης υπερφόρτωσης μεθόδων (method overloading) σε μια κλάση;
Ποιος είναι ο σκοπός της χρήσης υπερφόρτωσης μεθόδων (method overloading) σε μια κλάση;
Σε μια κλάση Java, πώς μπορείτε να εξασφαλίσετε ότι ένα πεδίο θα αρχικοποιηθεί μόνο μία φορά, κατά τη διάρκεια της φόρτωσης της κλάσης, και θα είναι κοινό για όλα τα αντικείμενα της κλάσης;
Σε μια κλάση Java, πώς μπορείτε να εξασφαλίσετε ότι ένα πεδίο θα αρχικοποιηθεί μόνο μία φορά, κατά τη διάρκεια της φόρτωσης της κλάσης, και θα είναι κοινό για όλα τα αντικείμενα της κλάσης;
Έχετε μια κλάση Car
με ένα πεδίο numberOfWheels
που είναι κοινό για όλα τα αντικείμενα Car
. Πώς θα δηλώνατε αυτό το πεδίο για να εξασφαλίσετε ότι η αλλαγή της τιμής του θα επηρεάσει όλα τα αντικείμενα Car
;
Έχετε μια κλάση Car
με ένα πεδίο numberOfWheels
που είναι κοινό για όλα τα αντικείμενα Car
. Πώς θα δηλώνατε αυτό το πεδίο για να εξασφαλίσετε ότι η αλλαγή της τιμής του θα επηρεάσει όλα τα αντικείμενα Car
;
Τι θα συμβεί αν προσπαθήσετε να αλλάξετε την τιμή ενός πεδίου που έχει δηλωθεί ως final
μετά την αρχικοποίησή του;
Τι θα συμβεί αν προσπαθήσετε να αλλάξετε την τιμή ενός πεδίου που έχει δηλωθεί ως final
μετά την αρχικοποίησή του;
Σε ποια περίπτωση είναι απαραίτητο να ορίσετε έναν κατασκευαστή (constructor) σε μια κλάση;
Σε ποια περίπτωση είναι απαραίτητο να ορίσετε έναν κατασκευαστή (constructor) σε μια κλάση;
Σχεδιάζετε μια κλάση Rectangle
που αναπαριστά ένα ορθογώνιο παραλληλόγραμμο. Πώς θα δηλώνατε τα πεδία width
και height
ώστε να είναι προσβάσιμα μόνο από τις μεθόδους της κλάσης και να διασφαλίσετε την εγκυρότητα των τιμών τους;
Σχεδιάζετε μια κλάση Rectangle
που αναπαριστά ένα ορθογώνιο παραλληλόγραμμο. Πώς θα δηλώνατε τα πεδία width
και height
ώστε να είναι προσβάσιμα μόνο από τις μεθόδους της κλάσης και να διασφαλίσετε την εγκυρότητα των τιμών τους;
Flashcards
Κοινό γνώρισμα κλάσης
Κοινό γνώρισμα κλάσης
Ένα γνώρισμα κοινό για όλα τα αντικείμενα μίας κλάσης.
Static
Static
Δηλώνει ένα γνώρισμα ή μέθοδο κοινή σε όλα τα αντικείμενα της κλάσης.
Final
Final
Γνώρισμα που μπορεί να διαβαστεί αλλά όχι να αλλάξει μετά την αρχικοποίηση.
Static Final
Static Final
Signup and view all the flashcards
Μέθοδος
Μέθοδος
Signup and view all the flashcards
Δομή μεθόδου
Δομή μεθόδου
Signup and view all the flashcards
Μέθοδοι πρόσβασης
Μέθοδοι πρόσβασης
Signup and view all the flashcards
toString()
toString()
Signup and view all the flashcards
Κατασκευαστής
Κατασκευαστής
Signup and view all the flashcards
this
this
Signup and view all the flashcards
Βασικός κατασκευαστής
Βασικός κατασκευαστής
Signup and view all the flashcards
Υπερφόρτωση μεθόδου
Υπερφόρτωση μεθόδου
Signup and view all the flashcards
finalize()
finalize()
Signup and view all the flashcards
Υπερφόρτωση
Υπερφόρτωση
Signup and view all the flashcards
finalize
finalize
Signup and view all the flashcards
Compiler
Compiler
Signup and view all the flashcards
Study Notes
Γνωρίσματα και μέθοδοι κλάσης
- Εάν ένα γνώρισμα είναι κοινό για όλα τα αντικείμενα μιας κλάσης, τότε δεσμεύεται μια φορά χώρος για όλα τα αντικείμενα.
- Τα static γνωρίσματα δηλώνονται με τη λέξη-κλειδί
static
και δημιουργούνται μία φορά όταν δηλωθεί το πρώτο αντικείμενο της κλάσης. - Μπορούν να χρησιμοποιηθούν από κάθε αντικείμενο της ίδιας κλάσης.
- Παράδειγμα:
static float bonus;
- Η πρόσβαση σε ένα static γνώρισμα γίνεται απευθείας μέσω της κλάσης:
Human.bonus=100,00;
- Παρόμοια ισχύουν και για τις static μεθόδους.
- Παράδειγμα:
static setBonus(float b)
καιHuman.setBonus(200.00)
- Τα static μέλη μπορούν να καλούνται απευθείας μέσω της κλάσης ή μέσω των αντικειμένων που δημιουργούνται.
- Οι static μέθοδοι έχουν πρόσβαση μόνο στα static μέλη της κλάσης.
- Τα final γνωρίσματα είναι πρακτικά σταθερές, μπορούν μόνο να αναγνωστούν.
- Όταν ένα γνώρισμα δηλώνεται final, πρέπει να αρχικοποιηθεί και η τιμή του δεν μπορεί να αλλάξει.
- Η final παράμετρος εισόδου μιας μεθόδου δεν μπορεί να αλλάξει τιμή μέσα στο σώμα της μεθόδου.
public void setHour(final int hrs)
- Αν ένα αντικείμενο δηλωθεί final, το όνομα του αντικειμένου θα αναφέρεται πάντα στο ίδιο αντικείμενο.
- Μια final κλάση δεν μπορεί να κληρονομηθεί από άλλη κλάση.
- Ο πιο αποτελεσματικός τρόπος για να υλοποιηθούν σταθερά γνωρίσματα μίας κλάσης είναι ως static final.
-
public class Time { private static final int NumHours = 24; public static final int NumMinutes = 60; }
-
- Τα static final γνωρίσματα μπορούν να είναι private εάν πρόκειται να χρησιμοποιηθούν μόνο εσωτερικά στην κλάση.
- Έχουν μόνο μία θέση αποθήκευσης, ανεξάρτητα από τον αριθμό των στιγμιοτύπων της κλάσης, και η τιμή τους είναι αμετάβλητη.
Δομή μεθόδου
- Η γενική δομή μιας μεθόδου είναι:
πρόσβαση τύποςΕπιστροφής όνομαΜεθόδου (τύπος1 παράμετρος1, ...)
- Παράδειγμα:
public double addDouble (double num1, double num2) { return num1 + num2; }
Βασικές μέθοδοι
- Μέθοδοι πρόσβασης (getters/setters) χρησιμοποιούνται κυρίως
getAttribute, setAttribute
για ανάγνωση και ενημέρωση. - Getters και setters
- Μέθοδος
toString()
επιστρέφει μια String αναπαράσταση του αντικειμένου. - Constructor είναι η μέθοδος αρχικοποίησης.
Class Human
private boolean alive; private int age; private String name; public void setAlive(boolean aAlive) { alive = aAlive; }
-Getter
java public boolean getAlive() { return alive; }
-ToString
java public String toString(){ return name+" "+age +" " +alive; }
-Constructor
java public Human(boolean aAlive, int aAge, String aName){ alive=aAlive; age=aAge; name=aName; }
Κλήση και αποτέλεσμα
- Όταν καλούμε μια μέθοδο, αυτή μπορεί να επιστρέφει ή να μην επιστρέφει μια τιμή.
- Εάν επιστρέφει τιμή:
public String getName(){...}
- Εάν δεν επιστρέφει τιμή:
public void setName(String n){...}
- Εάν επιστρέφει τιμή:
- Για να καλέσουμε μια μέθοδο, συνήθως χρειαζόμαστε ένα αντικείμενο της αντίστοιχης κλάσης.
Human h1 = new Human();
h1.setName("John");
- Εάν η μέθοδος επιστρέφει κάποια τιμή, πρέπει να την αποθηκεύσουμε σε μια μεταβλητή, αλλιώς η τιμή χάνεται.
String temp = h1.getName();
- Οι static μέθοδοι μπορούν να καλούνται απευθείας χρησιμοποιώντας το όνομα της κλάσης ή μέσω ενός αντικειμένου της κλάσης.
- Οι static μέθοδοι έχουν πρόσβαση μόνο στα static μέλη της κλάσης.
Πέρασμα αντικειμένου σε μέθοδο
- Όταν περνάμε ένα αντικείμενο σε μια μέθοδο, το πέρασμα γίνεται με αναφορά στο πραγματικό αντικείμενο.
public void giveName(Human h, String n) { h.setName(n); }
- Οποιεσδήποτε αλλαγές γίνουν στο αντικείμενο εντός της μεθόδου, θα επηρεάσουν μόνιμα το αντικείμενο.
java Human nonos = new Human(); Human paidi = new Human(); nonos.giveName(paidi, "Mary");
Μέθοδος κατασκευαστής
- Είναι μια public μέθοδος με όνομα ίδιο με αυτό της τάξης, χωρίς παραμέτρους και τύπο επιστροφής.
-
public Human() { }
-
- Δεσμεύει μνήμη για το αντικείμενο και κάνει τις αρχικοποιήσεις.
- Παράδειγμα κώδικα
- Αν υπάρχει τότε μπορούμε να ορίσουμε τις αρχικοποιήσεις.
- Μπορούμε να ορίσουμε άλλους κατασκευαστές, οπότε αναιρείται ο βασικός.
- Εάν θέλουμε και το βασικό κατασκευαστή, πρέπει υποχρεωτικά να τον ορίσουμε.
- Δήλωση ενός πιο σύνθετου κατασκευαστή
public Human (String tempName, String tempSurname, int tempAge) { name = tempName; surname = tempSurname; age = tempAge; }
- Προσοχή: Αν οριστεί μόνο αυτός ο κατασκευαστής, δεν θα μπορεί να καλεστεί ο default constructor (π.χ.
Human h1 = new Human();
θα προκαλέσει λάθος). Όταν ορίζεται ο βασικός constructor:public Human() { name = ""; surname = ""; age = 0; }
- Τα πεδία
name
καιsurname
σε κάθε νέοHuman
θα είναι""
και τοage
θα είναι0
, διαφορετικά θα είναιnull
.
Η λέξη this
- Χρησιμοποιείται μέσα σε μια μέθοδο για να αναφερθούμε στο αντικείμενο για το οποίο καλείται η μέθοδος.
- Το this είναι μια αναφορά στο αντικείμενο στο οποίο βρισκόμαστε.
Human increaseAge() { age++; return this; }
- Χρησιμοποιείται για να καλέσει ο ένας constructor τον άλλον (
this(...)
).public Human (String tempName, String tempSurname) { this(tempName, tempSurname, 0); }
- Χρησιμοποιείται στην περίπτωση που τα ονόματα των παραμέτρων στον κατασκευαστή είναι ίδια με τα ονόματα των πεδίων της κλάσης.
public Human (String name, String surname, int age) { this.name = name; this.surname = surname; this.age = age; }
Η μέθοδος finalize()
- Η Java διαθέτει μηχανισμό αυτόματης διαχείρισης μνήμης (garbage collector)
- Οποια μνήμη έχει δεσμευτεί με new αλλά δεν χρησιμοποιείται πλέον απελευθερώνεται.
(π.χ. όταν βγούμε από το μπλοκ που έγινε η δέσμευση)
- Ηfinalize καλείται πριν αποδεσμευθεί ο χώρος ενος αντικειμένου.
Πότε ορίζουμε την finalize
- Το garbage collection δεν σημαίνει απαραίτητα διαγραφή των πράξεων του αντικειμένου, -π.χ. αν το αντικείμενο έχει αυξήσει μια static μεταβλητή/ μετρητή θα πρέπει να τη μειώσουμε στη finalize()
- Το garbage collection δεν γίνεται άμεσα,π.χ. Συμβαίνει οταν χρειαζόμαστε μνήμη κατά την διάρκεια του προγράμματος.
- Αποδεσμεύει μνήμη.
- π.χ. αν θέλουμε να παρακολουθούμε πότε αποδεσμεύεται μνήμη μπορούμε να ορίσουμε τη finalize() να τυπώνει κάποιο μήνυμα
Υπερφόρτωση μεθόδων
-
Στην ίδια κλάση, μπορούμε να επαναχρησιμοποιήσουμε το ίδιο όνομα μεθόδου για μεθόδους που έχουν ελαφρώς:
- Διαφορετικούς τύπους ορισμάτων
- Διαφορετικό πλήθος ορισμάτων
-
Παραδείγματα υπερφόρτωσης μεθόδων:
void speak (String phrase); void speak (); void speak (int times, String phrase);
Περισσότερη υπερφόρτωση
- Δεν μπορούμε να χρησιμοποιήσουμε υπερφόρτωση βασιζόμενοι μόνο στην επιστρεφόμενη τιμή
Πλεονεκτήματα
- Οικονομία ονομάτων
- Ευανάγνωστο κώδικα
- Λιγότερα ονόματα υπάρχουν για εκμάθηση
Μειονεκτήματα
- Ευκολότερα σφάλματα
- Παραπλανητικά μηνύματα λάθους
Κλήση υπερφορτωμένης μεθόδου
- Ο compiler ψάχνει ποια μέθοδος ταιριάζει καλύτερα
- Προτιμάει ακριβή ταίριασμα
- Αν δεν βρίσκει ακριβές ταίριασμα πάει στη πιο κοντινή προσέγγιση
- Επιλέγει διεύρυνση τύπων και όχι στένεμα
-
void add (int I, int j); void add (double d, double e); Η add(10,8) θα χρησιμοποιήσει το (int, int) Η add(3.5, 4) θα χρησιμοποιήσει το (double, double)
- Μπορούμε να επιβάλλουμε το casting.
Παράδειγμα Κώδικα
class Calculator{
static int add(int a, int b) {return a+b;} static
float add(float a, float b) {return a+b;}
static double add(double a, double b) {return a+b;}
public static void main(String args[] ){
int x=5; int y=6;
double k=5.3; double m=4.5;
System.out.println("Athroisma “+ add(x,y));
System.out.println("Athroisma “+ add(k,m));
System.out.println(“Athroisma “+ add(x,m));
}
}
Studying That Suits You
Use AI to generate personalized quizzes and flashcards to suit your learning preferences.