Γνωρίσματα και Μέθοδοι Κλάσης

Choose a study mode

Play Quiz
Study Flashcards
Spaced Repetition
Chat to Lesson

Podcast

Play an AI-generated podcast conversation about this lesson
Download our mobile app to listen on the go
Get App

Questions and Answers

Ποια είναι η σημασία της χρήσης της λέξης-κλειδί static στη δήλωση ενός γνωρίσματος κλάσης;

  • Δημιουργεί μόνο ένα αντίγραφο του γνωρίσματος που μοιράζεται από όλα τα αντικείμενα της κλάσης. (correct)
  • Εμποδίζει την πρόσβαση στο γνώρισμα από οποιαδήποτε μέθοδο εκτός της κλάσης.
  • Δημιουργεί ένα αντίγραφο του γνωρίσματος για κάθε αντικείμενο της κλάσης.
  • Δηλώνει ότι το γνώρισμα μπορεί να τροποποιηθεί μόνο από τη μέθοδο κατασκευής.

Σε μια κλάση, πώς μπορείτε να προσπελάσετε ένα static γνώρισμα εκτός της κλάσης;

  • Χρησιμοποιώντας το όνομα της κλάσης ακολουθούμενο από την τελεία και το όνομα του γνωρίσματος. (correct)
  • Δεν είναι δυνατή η προσπέλαση εκτός της κλάσης.
  • Μόνο μέσα από τις μεθόδους της κλάσης.
  • Χρησιμοποιώντας ένα αντικείμενο της κλάσης ακολουθούμενο από την τελεία και το όνομα του γνωρίσματος.

Τι συμβαίνει όταν ένα γνώρισμα μιας κλάσης δηλωθεί ως final;

  • Μπορεί να προσπελαστεί μόνο από την κλάση που το έχει δηλώσει.
  • Πρέπει να αρχικοποιηθεί κατά τη δήλωση και δεν μπορεί να αλλάξει η τιμή του. (correct)
  • Δεν χρειάζεται να αρχικοποιηθεί.
  • Η τιμή του μπορεί να αλλάξει οποιαδήποτε στιγμή.

Ποιος είναι ο πιο αποτελεσματικός τρόπος για να οριστούν σταθερές τιμές σε μια κλάση, ώστε να είναι προσβάσιμες αλλά όχι μεταβλητές;

<p>Δηλώνοντας τις μεταβλητές ως <code>static final</code>. (C)</p> Signup and view all the answers

Τι σημαίνει η δήλωση μιας μεθόδου ως static;

<p>Η μέθοδος μπορεί να προσπελαστεί χωρίς να δημιουργηθεί αντικείμενο της κλάσης. (A)</p> Signup and view all the answers

Ποια είναι η δομή μιας μεθόδου;

<p><code>πρόσβαση τύποςΕπιστροφής όνομαΜεθόδου (τύπος1 παράμετρος1, ...) { ... }</code> (C)</p> Signup and view all the answers

Ποιος είναι ο ρόλος μιας μεθόδου πρόσβασης (getter) σε μια κλάση;

<p>Να επιστρέφει την τιμή ενός ιδιωτικού γνωρίσματος της κλάσης. (C)</p> Signup and view all the answers

Ποια είναι η λειτουργία της μεθόδου toString();

<p>Επιστρέφει μια συμβολική αναπαράσταση του αντικειμένου. (A)</p> Signup and view all the answers

Τι είναι ο κατασκευαστής (constructor) σε μια κλάση;

<p>Μια ειδική μέθοδος που καλείται αυτόματα κατά τη δημιουργία ενός αντικειμένου της κλάσης. (C)</p> Signup and view all the answers

Ποια είναι η συνέπεια της κλήσης μιας μεθόδου που επιστρέφει μια τιμή χωρίς να αποθηκεύσετε την τιμή σε μια μεταβλητή;

<p>Η τιμή χάνεται και δεν μπορεί να χρησιμοποιηθεί περαιτέρω. (B)</p> Signup and view all the answers

Πώς καλείται μια static μέθοδος;

<p>Απευθείας μέσω του ονόματος της κλάσης. (B)</p> Signup and view all the answers

Τι συμβαίνει όταν ένα αντικείμενο περνάει ως παράμετρος σε μια μέθοδο;

<p>Περνάει μια αναφορά στο αρχικό αντικείμενο. (D)</p> Signup and view all the answers

Τι συμβαίνει αν ορίσετε έναν κατασκευαστή με παραμέτρους και δεν ορίσετε τον default (χωρίς παραμέτρους) κατασκευαστή;

<p>Δεν μπορείτε να δημιουργήσετε αντικείμενα χωρίς να χρησιμοποιήσετε τον κατασκευαστή με παραμέτρους. (B)</p> Signup and view all the answers

Ποιος είναι ο ρόλος της λέξης-κλειδί this μέσα σε μια μέθοδο;

<p>Αναφέρεται στο τρέχον αντικείμενο της κλάσης. (D)</p> Signup and view all the answers

Σε ποια περίπτωση θα χρησιμοποιούσατε τη λέξη-κλειδί this μέσα σε έναν κατασκευαστή;

<p>Όταν τα ονόματα των παραμέτρων του κατασκευαστή είναι ίδια με τα ονόματα των πεδίων της κλάσης. (B)</p> Signup and view all the answers

Ποιος είναι ο σκοπός της μεθόδου finalize() στην Java;

<p>Να εκτελέσει καθαρισμό μνήμης πριν την αποδέσμευση ενός αντικειμένου από τον garbage collector. (B)</p> Signup and view all the answers

Πότε είναι χρήσιμο να ορίσετε τη μέθοδο finalize() σε μια κλάση;

<p>Όταν θέλετε να παρακολουθείτε πότε αποδεσμεύεται μνήμη. (D)</p> Signup and view all the answers

Τι είναι υπερφόρτωση μεθόδων (method overloading);

<p>Η δυνατότητα δημιουργίας μεθόδων με το ίδιο όνομα αλλά διαφορετικό αριθμό ή τύπο παραμέτρων. (A)</p> Signup and view all the answers

Πότε είναι κατάλληλη η χρήση της υπερφόρτωσης μεθόδων;

<p>Όταν οι μέθοδοι έχουν παρόμοια λειτουργικότητα αλλά δέχονται διαφορετικούς τύπους δεδομένων. (A)</p> Signup and view all the answers

Γιατί η υπερφόρτωση μεθόδων δεν μπορεί να βασίζεται μόνο στον τύπο επιστροφής;

<p>Επειδή ο compiler δεν μπορεί να διακρίνει ποιa μέθοδος πρέπει να καλεστεί μόνο από τον τύπο επιστροφής. (D)</p> Signup and view all the answers

Σε μια κλήση υπερφορτωμένης μεθόδου, πώς ο compiler αποφασίζει ποια έκδοση της μεθόδου θα καλέσει;

<p>Επιλέγει τη μέθοδο που ταιριάζει καλύτερα στους τύπους των παραμέτρων που παρέχονται στην κλήση. (B)</p> Signup and view all the answers

Τι είναι το casting και πότε χρησιμοποιείται σε σχέση με την υπερφόρτωση μεθόδων;

<p>Είναι η υποχρεωτική μετατροπή ενός τύπου δεδομένων σε έναν άλλο και χρησιμοποιείται για να καθοριστεί ποια υπερφορτωμένη μέθοδος θα κληθεί. (D)</p> Signup and view all the answers

Σε μια κλάση, μπορείτε να έχετε πολλές μεθόδους με το ίδιο όνομα, αλλά με διαφορετικές λίστες παραμέτρων. Πώς ονομάζεται αυτό;

<p>Υπερφόρτωση μεθόδων. (D)</p> Signup and view all the answers

Ποια είναι η διαφορά μεταξύ υπερφόρτωσης (overloading) και επικάλυψης (overriding) μεθόδων;

<p>Η υπερφόρτωση χρησιμοποιεί το ίδιο όνομα με διαφορετικές παραμέτρους, ενώ η επικάλυψη χρησιμοποιεί το ίδιο όνομα και παραμέτρους. (A)</p> Signup and view all the answers

Ποιος είναι ο σκοπός της χρήσης υπερφόρτωσης μεθόδων (method overloading) σε μια κλάση;

<p>Για να παρέχεται ευελιξία στον τρόπο με τον οποίο μπορεί να καλεστεί μια συγκεκριμένη λειτουργία. (B)</p> Signup and view all the answers

Σε μια κλάση Java, πώς μπορείτε να εξασφαλίσετε ότι ένα πεδίο θα αρχικοποιηθεί μόνο μία φορά, κατά τη διάρκεια της φόρτωσης της κλάσης, και θα είναι κοινό για όλα τα αντικείμενα της κλάσης;

<p>Δηλώνοντας το πεδίο ως <code>static final</code> και αρχικοποιώντας το κατά τη δήλωση. (D)</p> Signup and view all the answers

Έχετε μια κλάση Car με ένα πεδίο numberOfWheels που είναι κοινό για όλα τα αντικείμενα Car. Πώς θα δηλώνατε αυτό το πεδίο για να εξασφαλίσετε ότι η αλλαγή της τιμής του θα επηρεάσει όλα τα αντικείμενα Car;

<p><code>public static int numberOfWheels = 4;</code> (D)</p> Signup and view all the answers

Τι θα συμβεί αν προσπαθήσετε να αλλάξετε την τιμή ενός πεδίου που έχει δηλωθεί ως final μετά την αρχικοποίησή του;

<p>Θα προκληθεί σφάλμα κατά τη μεταγλώττιση του προγράμματος (compilation error). (B)</p> Signup and view all the answers

Σε ποια περίπτωση είναι απαραίτητο να ορίσετε έναν κατασκευαστή (constructor) σε μια κλάση;

<p>Είναι απαραίτητο μόνο όταν θέλετε να παρέχετε συγκεκριμένες αρχικές τιμές στα πεδία του αντικειμένου κατά τη δημιουργία του. (A)</p> Signup and view all the answers

Σχεδιάζετε μια κλάση Rectangle που αναπαριστά ένα ορθογώνιο παραλληλόγραμμο. Πώς θα δηλώνατε τα πεδία width και height ώστε να είναι προσβάσιμα μόνο από τις μεθόδους της κλάσης και να διασφαλίσετε την εγκυρότητα των τιμών τους;

<p><code>private int width, height; //και δημιουργία public getter/setter methods</code> (D)</p> Signup and view all the answers

Flashcards

Κοινό γνώρισμα κλάσης

Ένα γνώρισμα κοινό για όλα τα αντικείμενα μίας κλάσης.

Static

Δηλώνει ένα γνώρισμα ή μέθοδο κοινή σε όλα τα αντικείμενα της κλάσης.

Final

Γνώρισμα που μπορεί να διαβαστεί αλλά όχι να αλλάξει μετά την αρχικοποίηση.

Static Final

Τρόπος υλοποίησης σταθερών γνωρισμάτων με static και final.

Signup and view all the flashcards

Μέθοδος

Ένα τμήμα κώδικα που εκτελεί μια συγκεκριμένη εργασία.

Signup and view all the flashcards

Δομή μεθόδου

Περιλαμβάνει πρόσβαση, τύπος, όνομα και παραμέτρους.

Signup and view all the flashcards

Μέθοδοι πρόσβασης

getAttribute και setAttribute.

Signup and view all the flashcards

toString()

Μέθοδος που επιστρέφει μια συμβολοσειρά που περιγράφει ένα αντικείμενο.

Signup and view all the flashcards

Κατασκευαστής

Μεθόδος που δημιουργεί ένα νέο αντικείμενο.

Signup and view all the flashcards

this

Αναφέρεται στο τρέχον αντικείμενο μέσα σε μια μέθοδο.

Signup and view all the flashcards

Βασικός κατασκευαστής

Κατασκευαστής χωρίς παραμέτρους.

Signup and view all the flashcards

Υπερφόρτωση μεθόδου

Μια μέθοδος με το ίδιο όνομα αλλά διαφορετικές παραμέτρους.

Signup and view all the flashcards

finalize()

Μέθοδος που καλείται πριν την αποδέσμευση μνήμης.

Signup and view all the flashcards

Υπερφόρτωση

Δεν γίνεται μόνο με επιστρεφόμενη τιμή.

Signup and view all the flashcards

finalize

Ονομάζεται αυτόματα από τον garbage collector.

Signup and view all the flashcards

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.

Quiz Team

Related Documents

More Like This

Mengenal Method dalam Class
6 questions

Mengenal Method dalam Class

ConstructiveRapture avatar
ConstructiveRapture
Math Class Methods and Object Creation
13 questions
Java Static Concepts
8 questions

Java Static Concepts

TopInspiration7420 avatar
TopInspiration7420
Python Class Attributes and Methods
20 questions
Use Quizgecko on...
Browser
Browser