Junior
Ποιοι τύποι κλάσεων υπάρχουν στη Java;
sobes.tech AI
Απάντηση από AI
Στη Java υπάρχουν οι ακόλουθοι βασικοί τύποι κλάσεων:
-
Τυπική Κλάση (Standard Class)
- Μπορεί να περιέχει πεδία, μεθόδους, κατασκευαστές.
- Μπορεί να κληρονομηθεί από άλλες κλάσεις, εάν δεν δηλωθεί ως
final. - Μπορεί να υλοποιεί διεπαφές.
- Δηλώνεται με τροποποιητές πρόσβασης (
public,protected,default,private).
-
Αφηρημένη Κλάση (Abstract Class)
- Δηλώνεται με τη λέξη-κλειδί
abstract. - Δεν μπορεί να δημιουργηθεί άμεσα αντικείμενο.
- Μπορεί να περιέχει αφηρημένες μεθόδους (χωρίς υλοποίηση) και κανονικές μεθόδους.
- Προορίζεται για κληρονομιά; οι υποκλάσεις πρέπει να υλοποιούν τις αφηρημένες μεθόδους.
// Αφηρημένη κλάση για σχήμα abstract class Shape { abstract double area(); // Αφηρημένη μέθοδος υπολογισμού επιφάνειας void display() { // Κανονική μέθοδος System.out.println("Αυτό είναι ένα σχήμα."); } } - Δηλώνεται με τη λέξη-κλειδί
-
Τελική Κλάση (Final Class)
- Δηλώνεται με τη λέξη-κλειδί
final. - Δεν μπορεί να κληρονομηθεί από άλλες κλάσεις.
- Χρησιμοποιείται για την αποτροπή επέκτασης της κλάσης, την εξασφάλιση ασφάλειας ή την αμετάβλητη υλοποίηση.
// Τελική κλάση που δεν μπορεί να κληρονομηθεί final class ImmutableString { private final String value; public ImmutableString(String value) { this.value = value; } public String getValue() { return value; } } - Δηλώνεται με τη λέξη-κλειδί
-
Enum (Καταλόγοι)
- Ένας ειδικός τύπος κλάσης, προορισμένος να αντιπροσωπεύει ένα σταθερό σύνολο σταθερών.
- Δηλώνεται με τη λέξη-κλειδί
enum. - Οι σταθερές enum είναι από προεπιλογή
public static final. - Μπορούν να έχουν πεδία, μεθόδους και κατασκευαστές (με κρυφό τροποποιητή
private).
// Enum για τις ημέρες της εβδομάδας enum DayOfWeek { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY } -
Τυχαίες Κλάσεις (Anonymous Class)
- Μια κλάση χωρίς όνομα, που δημιουργείται και δημιουργείται ταυτόχρονα.
- Συχνά χρησιμοποιείται για την υλοποίηση διεπαφών ή την επέκταση κλάσεων "on the fly", όταν απαιτείται μία φορά χρήση.
- Δεν μπορούν να έχουν ρητούς κατασκευαστές.
// Δημιουργία τυχαίας κλάσης που υλοποιεί το Runnable Runnable r = new Runnable() { @Override public void run() { System.out.println("Τρέχει σε μια τυχαία κλάση."); } }; -
Ενσωματωμένες Κλάσεις (Nested Class)
- Κλάσεις που δηλώνονται μέσα σε μια άλλη κλάση.
- Υπάρχουν δύο τύποι:
- Στατικές Ενσωματωμένες Κλάσεις (Static Nested Class): δηλώνονται με
static. Δεν έχουν άμεση πρόσβαση στα μη-στατικά μέλη της εξωτερικής κλάσης. Δημιουργούνται ως κανονικές κλάσεις. - Εσωτερικές Κλάσεις (Inner Class): δεν δηλώνονται με
static. Έχουν πρόσβαση σε όλα τα μέλη της εξωτερικής κλάσης, συμπεριλαμβανομένων τωνprivate. Απαιτούν ένα αντικείμενο της εξωτερικής κλάσης για τη δημιουργία τους.
- Στατικές Ενσωματωμένες Κλάσεις (Static Nested Class): δηλώνονται με
// Εξωτερική κλάση 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 } } } -
Κλάσεις Εγγραφής (Record - από το Java 14)
- Δηλώνονται με τη λέξη-κλειδί
record. - Προορίζονται για την αποθήκευση δεδομένων. Ο μεταγλωττιστής δημιουργεί αυτόματα τον κατασκευαστή, τις μεθόδους πρόσβασης (
accessor methods),equals(),hashCode()καιtoString(). - Τα πεδία της εγγραφής είναι άμεσα
final.
// Record για την αναπαράσταση ενός σημείου σε 2D χώρο record Point(int x, int y) { // Ο μεταγλωττιστής θα δημιουργήσει τον κατασκευαστή, τις μεθόδους x(), y(), equals(), hashCode(), toString() } - Δηλώνονται με τη λέξη-κλειδί