Sobes.tech
Junior

Ποιοι τύποι κλάσεων υπάρχουν στη Java;

sobes.tech AI

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

Στη Java υπάρχουν οι ακόλουθοι βασικοί τύποι κλάσεων:

  1. Τυπική Κλάση (Standard Class)

    • Μπορεί να περιέχει πεδία, μεθόδους, κατασκευαστές.
    • Μπορεί να κληρονομηθεί από άλλες κλάσεις, εάν δεν δηλωθεί ως final.
    • Μπορεί να υλοποιεί διεπαφές.
    • Δηλώνεται με τροποποιητές πρόσβασης (public, protected, default, private).
  2. Αφηρημένη Κλάση (Abstract Class)

    • Δηλώνεται με τη λέξη-κλειδί abstract.
    • Δεν μπορεί να δημιουργηθεί άμεσα αντικείμενο.
    • Μπορεί να περιέχει αφηρημένες μεθόδους (χωρίς υλοποίηση) και κανονικές μεθόδους.
    • Προορίζεται για κληρονομιά; οι υποκλάσεις πρέπει να υλοποιούν τις αφηρημένες μεθόδους.
    // Αφηρημένη κλάση για σχήμα
    abstract class Shape {
        abstract double area(); // Αφηρημένη μέθοδος υπολογισμού επιφάνειας
    
        void display() { // Κανονική μέθοδος
            System.out.println("Αυτό είναι ένα σχήμα.");
        }
    }
    
  3. Τελική Κλάση (Final Class)

    • Δηλώνεται με τη λέξη-κλειδί final.
    • Δεν μπορεί να κληρονομηθεί από άλλες κλάσεις.
    • Χρησιμοποιείται για την αποτροπή επέκτασης της κλάσης, την εξασφάλιση ασφάλειας ή την αμετάβλητη υλοποίηση.
    // Τελική κλάση που δεν μπορεί να κληρονομηθεί
    final class ImmutableString {
        private final String value;
    
        public ImmutableString(String value) {
            this.value = value;
        }
    
        public String getValue() {
            return value;
        }
    }
    
  4. Enum (Καταλόγοι)

    • Ένας ειδικός τύπος κλάσης, προορισμένος να αντιπροσωπεύει ένα σταθερό σύνολο σταθερών.
    • Δηλώνεται με τη λέξη-κλειδί enum.
    • Οι σταθερές enum είναι από προεπιλογή public static final.
    • Μπορούν να έχουν πεδία, μεθόδους και κατασκευαστές (με κρυφό τροποποιητή private).
    // Enum για τις ημέρες της εβδομάδας
    enum DayOfWeek {
        MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
    }
    
  5. Τυχαίες Κλάσεις (Anonymous Class)

    • Μια κλάση χωρίς όνομα, που δημιουργείται και δημιουργείται ταυτόχρονα.
    • Συχνά χρησιμοποιείται για την υλοποίηση διεπαφών ή την επέκταση κλάσεων "on the fly", όταν απαιτείται μία φορά χρήση.
    • Δεν μπορούν να έχουν ρητούς κατασκευαστές.
    // Δημιουργία τυχαίας κλάσης που υλοποιεί το Runnable
    Runnable r = new Runnable() {
        @Override
        public void run() {
            System.out.println("Τρέχει σε μια τυχαία κλάση.");
        }
    };
    
  6. Ενσωματωμένες Κλάσεις (Nested Class)

    • Κλάσεις που δηλώνονται μέσα σε μια άλλη κλάση.
    • Υπάρχουν δύο τύποι:
      • Στατικές Ενσωματωμένες Κλάσεις (Static Nested Class): δηλώνονται με static. Δεν έχουν άμεση πρόσβαση στα μη-στατικά μέλη της εξωτερικής κλάσης. Δημιουργούνται ως κανονικές κλάσεις.
      • Εσωτερικές Κλάσεις (Inner Class): δεν δηλώνονται με static. Έχουν πρόσβαση σε όλα τα μέλη της εξωτερικής κλάσης, συμπεριλαμβανομένων των private. Απαιτούν ένα αντικείμενο της εξωτερικής κλάσης για τη δημιουργία τους.
    // Εξωτερική κλάση
    class OuterClass {
        private String outerField = "Outer";
    
        // Στατική ενσωματωμένη κλάση
        static class StaticNestedClass {
            void display() {
                System.out.println("Μέσα στη StaticNestedClass.");
                // Δεν έχει πρόσβαση στο outerField
            }
        }
    
        // Εσωτερική κλάση
        class InnerClass {
            void display() {
                System.out.println("Μέσα στην InnerClass. outerField: " + outerField); // Πρόσβαση στο outerField
            }
        }
    }
    
  7. Κλάσεις Εγγραφής (Record - από το Java 14)

    • Δηλώνονται με τη λέξη-κλειδί record.
    • Προορίζονται για την αποθήκευση δεδομένων. Ο μεταγλωττιστής δημιουργεί αυτόματα τον κατασκευαστή, τις μεθόδους πρόσβασης (accessor methods), equals(), hashCode() και toString().
    • Τα πεδία της εγγραφής είναι άμεσα final.
    // Record για την αναπαράσταση ενός σημείου σε 2D χώρο
    record Point(int x, int y) {
        // Ο μεταγλωττιστής θα δημιουργήσει τον κατασκευαστή, τις μεθόδους x(), y(), equals(), hashCode(), toString()
    }