Sobes.tech
Junior

Τι σημαίνει η λέξη-κλειδί 'final' στη γλώσσα προγραμματισμού Java;

sobes.tech AI

Απάντηση από AI

Η λέξη-κλειδί final στη Java χρησιμοποιείται για να δηλώσει ότι μια μεταβλητή, μέθοδος ή κλάση δεν μπορούν να τροποποιηθούν.

  1. Μεταβλητή final:

    • Μια μεταβλητή που δηλώνεται ως final μπορεί να της αποδοθεί τιμή μόνο μία φορά. Μετά την αποδοχή, δεν μπορεί να αλλάξει.
    • Για τους πρωταρχικούς τύπους δεδομένων, η τιμή μιας final μεταβλητής είναι μια σταθερά.
    • Για τους αναφορικούς τύπους δεδομένων, το final σημαίνει ότι η αναφορά στο αντικείμενο δεν μπορεί να αλλάξει, αλλά η κατάσταση του αντικειμένου (τα πεδία του) μπορεί να τροποποιηθεί (εκτός αν τα πεδία του αντικειμένου είναι και αυτά final).
    final int MAX_VALUE = 100; // τελική πρωταρχική μεταβλητή
    
    final List<String> names = new ArrayList<>(); // τελική αναφορική μεταβλητή
    names.add("Alice"); // ΟΚ
    // names = new ArrayList<>(); // Σφάλμα μεταγλώττισης - δεν μπορεί να επαναπροσδιοριστεί η αναφορά
    
  2. Μέθοδος final:

    • Μια μέθοδος που δηλώνεται ως final δεν μπορεί να υπερισχύσει σε υποκλάσεις.
    • Αυτό χρησιμοποιείται για να αποτρέψει ανεπιθύμητες αλλαγές στη συμπεριφορά στην κληρονομική ιεραρχία.
    class Parent {
        final void display() {
            System.out.println("Αυτή είναι μια τελική μέθοδος.");
        }
    }
    
    class Child extends Parent {
        // @Override void display() { } // Σφάλμα μεταγλώττισης - δεν μπορεί να υπερισχύσει μια τελική μέθοδος
    }
    
  3. Τάξη final:

    • Μια τάξη που δηλώνεται ως final δεν μπορεί να έχει υποκλάσεις (δεν μπορεί να κληρονομηθεί).
    • Αυτό χρησιμοποιείται για να διασφαλίσει την αμετάβλητη φύση της τάξης και να αποτρέψει την επέκταση της λειτουργικότητάς της.
    final class ImmutableClass {
        private final int value;
    
        public ImmutableClass(int value) {
            this.value = value;
        }
    
        public int getValue() {
            return value;
        }
    }
    
    // class TryingToExtend extends ImmutableClass { } // Σφάλμα μεταγλώττισης - δεν μπορεί να κληρονομήσει από μια τελική τάξη