Customize Consent Preferences

We use cookies to help you navigate efficiently and perform certain functions. You will find detailed information about all cookies under each consent category below.

The cookies that are categorized as "Necessary" are stored on your browser as they are essential for enabling the basic functionalities of the site. ... 

Always Active

Necessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.

No cookies to display.

Functional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.

No cookies to display.

Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.

No cookies to display.

Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.

No cookies to display.

Advertisement cookies are used to provide visitors with customized advertisements based on the pages you visited previously and to analyze the effectiveness of the ad campaigns.

No cookies to display.

Μεταβλητές και μέθοδοι στην Java μπορούν να έχουν διάφορους modifiers, δηλαδή επιπρόσθετες λέξεις-κλειδιά που τροποποιούν τη συμπεριφορά τους. Οι συνηθέστεροι modifiers στην Java είναι οι εξής:

  • public: Η μεταβλητή ή η μέθοδος είναι προσβάσιμη από οπουδήποτε.
  • private: Η μεταβλητή ή η μέθοδος είναι προσβάσιμη μόνο από μέσα στην ίδια κλάση.
  • protected: Η μεταβλητή ή η μέθοδος είναι προσβάσιμη από την ίδια κλάση, κληρονομικές κλάσεις και κλάσεις στο ίδιο πακέτο.
  • default: Η μεταβλητή ή η μέθοδος είναι προσβάσιμη μόνο από κλάσεις στο ίδιο πακέτο.

Παρακάτω είναι ένα παράδειγμα χρήσης των modifiers σε μια κλάση:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
public class MyClass {
public int x; // public modifier
private int y; // private modifier
protected int z; // protected modifier
int w; // default modifier
}
public class MyClass { public int x; // public modifier private int y; // private modifier protected int z; // protected modifier int w; // default modifier }
public class MyClass {
  public int x;          // public modifier
  private int y;         // private modifier
  protected int z;      // protected modifier
  int w;                 // default modifier
}

Στο παραπάνω παράδειγμα, η μεταβλητή x έχει τον public modifier, η μεταβλητή y έχει τον private modifier, η μεταβλητή z έχει τον protected modifier και η μεταβλητή w έχει τον default modifier.

Η λέξη-κλειδί public είναι ένας access modifier, δηλαδή χρησιμοποιείται για να ορίσει το επίπεδο πρόσβασης σε κλάσεις, χαρακτηριστικά, μέθοδους και constructors.

Οι modifiers χωρίζονται σε δύο ομάδες:

Access Modifiers – ελέγχουν το επίπεδο πρόσβασης
Non-Access Modifiers – δεν ελέγχουν το επίπεδο πρόσβασης, αλλά παρέχουν άλλες λειτουργίες

Εδώ είναι μερικά από τα πιο συνηθισμένα modifiers στην Java:

Access Modifiers:

  • public: Η κλάση ή οι μέθοδοι είναι προσβάσιμες από οπουδήποτε.
  • private: Η κλάση ή οι μέθοδοι είναι προσβάσιμες μόνο από την ίδια κλάση.
  • protected: Η κλάση ή οι μέθοδοι είναι προσβάσιμες από την ίδια κλάση, κληρονομικές κλάσεις και κλάσεις στο ίδιο πακέτο.
  • default: Η κλάση ή οι μέθοδοι είναι προσβάσιμες μόνο από κλάσεις στο ίδιο πακέτο.

Non-Access Modifiers:

  • static: Η μεταβλητή ή η μέθοδος ανήκει στην κλάση, αντί για κάθε αντικείμενο της κλάσης.
  • final: Η μεταβλητή δεν μπορεί να τροποποιηθεί μετά την αρχικοποίησή της. Μια μέθοδος final δεν μπορεί να υποκατασταθεί από μια κληρονομική κλάση.
  • abstract: Η μέθοδος δεν έχει σώμα και πρέπει να υλοποιηθεί από μια κλάση-υποκλάση.
  • synchronized: Μόνο ένα νήμα μπορεί να εκτελεί αυτήν τη μέθοδο σε οποιοδήποτε σημείο χρόνου.
  • volatile: Η τιμή της μεταβλητής δεν πρέπει να προβληθεί από κρυφά νήματα ή να αποθηκευτεί σε κρυφή κρυφή μνήμη.
  • transient: Η μεταβλητή δεν αποθηκεύεται από τον μηχανισμό αποθήκευσης κατάστασης αντικειμένων.
  • strictfp: Οι πράξεις με αριθμούς κινητής υποδιαστολής ακολουθούν τις αυστηρές προδιαγραφές του προτύπου IEEE 754.
  • Μπορείτε να συνδυάσετε modifiers όπως θέλετε. Για παράδειγμα, μια μέθοδος μπορεί να είναι και public και static.

Για τις κλάσεις στη Java, μπορείτε να χρησιμοποιήσετε είτε το public είτε το default modifier:

Modifier Περιγραφή
public Η κλάση είναι προσβάσιμη από οποιαδήποτε άλλη κλάση.
default Η κλάση είναι προσβάσιμη μόνο από κλάσεις στο ίδιο πακέτο. Αυτό χρησιμοποιείται όταν δεν καθορίζετε κάποιο modifier.

[adinserter block=”2″]

Για τα χαρακτηριστικά και τις μεθόδους στη Java, μπορείτε να χρησιμοποιήσετε τους παρακάτω modifiers:

Modifier Περιγραφή
public Το χαρακτηριστικό ή η μέθοδος είναι προσβάσιμη από οποιαδήποτε άλλη κλάση.
private Το χαρακτηριστικό ή η μέθοδος είναι προσβάσιμη μόνο από την ίδια κλάση.
protected Το χαρακτηριστικό ή η μέθοδος είναι προσβάσιμη από την ίδια κλάση, κληρονομικές κλάσεις και κλάσεις στο ίδιο πακέτο.
default Το χαρακτηριστικό ή η μέθοδος είναι προσβάσιμη μόνο από κλάσεις στο ίδιο πακέτο.

Για τις κλάσεις στη Java, μπορείτε να χρησιμοποιήσετε τους εξής non-access modifiers:

Modifier Περιγραφή
final Η κλάση δεν μπορεί να κληρονομηθεί από άλλες κλάσεις (θα μάθετε περισσότερα σχετικά με την κληρονομιά στο κεφάλαιο Κληρονομιά).
abstract Η κλάση δεν μπορεί να χρησιμοποιηθεί για να δημιουργήσει αντικείμενα (για να έχετε πρόσβαση σε μια abstract κλάση, πρέπει να κληρονομήσετε από μια άλλη κλάση. Θα μάθετε περισσότερα για την κληρονομιά και την αφαίρεση στα κεφάλαια Κληρονομιά και Αφαίρεση).

Για τα χαρακτηριστικά και τις μεθόδους στη Java, μπορείτε να χρησιμοποιήσετε τους παρακάτω non-access modifiers:

Modifier Περιγραφή
static Η μεταβλητή ή η μέθοδος ανήκει στην κλάση αντί για κάθε αντικείμενο της κλάσης.
final Η μεταβλητή δεν μπορεί να τροποποιηθεί μετά την αρχικοποίηση της. Μια μέθοδος final δεν μπορεί να υποκατασταθεί από μια κληρονομική κλάση.
abstract Η μέθοδος δεν έχει σώμα και πρέπει να υλοποιηθεί από μια κλάση-υποκλάση.
synchronized: Μόνο ένα νήμα μπορεί να εκτελεί τη μέθοδο σε μια στιγμή.
volatile: Η τιμή της μεταβλητής δεν μπορεί να αποθηκευτεί στην κρυφή μνήμη του συστήματος. Αυτό σημαίνει ότι η τιμή της μεταβλητής θα πρέπει να διαβάζεται από τη βασική μνήμη σε κάθε νήμα.
transient: Η μεταβλητή δεν αποθηκεύεται κατά τη σειριοποίηση ενός αντικειμένου.
native: Η μέθοδος υλοποιείται σε κώδικα μηχανής και δεν είναι υλοποιημένη σε Java.

Αν δεν θέλετε να επιτρέπεται η αλλαγή τιμών υπαρχόντων χαρακτηριστικών, δηλώστε τα χαρακτηριστικά ως final:

Example:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
public class MyClass {
final int x = 10;
final double PI = 3.14;
public static void main(String[] args) {
MyClass myObj = new MyClass();
myObj.x = 50; // will generate an error: cannot assign a value to a final variable
myObj.PI = 25; // will generate an error: cannot assign a value to a final variable
System.out.println(myObj.x);
System.out.println(myObj.PI);
}
}
public class MyClass { final int x = 10; final double PI = 3.14; public static void main(String[] args) { MyClass myObj = new MyClass(); myObj.x = 50; // will generate an error: cannot assign a value to a final variable myObj.PI = 25; // will generate an error: cannot assign a value to a final variable System.out.println(myObj.x); System.out.println(myObj.PI); } }
public class MyClass {
  final int x = 10;
  final double PI = 3.14;

  public static void main(String[] args) {
    MyClass myObj = new MyClass();
    myObj.x = 50; // will generate an error: cannot assign a value to a final variable
    myObj.PI = 25; // will generate an error: cannot assign a value to a final variable
    System.out.println(myObj.x);
    System.out.println(myObj.PI);
  }
}

Στο παραπάνω παράδειγμα, το x είναι μια μεταβλητή final που αρχικοποιείται στην τιμή 10 και δεν μπορεί να αλλάξει τιμή αργότερα. Επίσης, το PI είναι μια σταθερά τιμή (final variable) που δεν μπορεί να αλλάξει τιμή αργότερα. Όταν προσπαθείτε να αλλάξετε τις τιμές των μεταβλητών αυτές, θα προκαλέσετε σφάλμα καθώς έχουν οριστεί ως final.

[adinserter block=”3″]

Μια στατική μέθοδος σημαίνει ότι μπορεί να προσπελαστεί χωρίς τη δημιουργία αντικειμένου της κλάσης, σε αντίθεση με τη δηλώση public:

Παράδειγμα:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
public class MyClass {
static void myStaticMethod() {
System.out.println("Static methods can be called without creating objects");
}
public void myPublicMethod() {
System.out.println("Public methods must be called by creating objects");
}
public static void main(String[ ] args) {
myStaticMethod(); // Call the static method
// myPublicMethod(); Σφάλμα κατά την μεταγλώττιση
MyClass myObj = new MyClass(); // Create an object of MyClass
myObj.myPublicMethod(); // Call the public method
}
}
public class MyClass { static void myStaticMethod() { System.out.println("Static methods can be called without creating objects"); } public void myPublicMethod() { System.out.println("Public methods must be called by creating objects"); } public static void main(String[ ] args) { myStaticMethod(); // Call the static method // myPublicMethod(); Σφάλμα κατά την μεταγλώττιση MyClass myObj = new MyClass(); // Create an object of MyClass myObj.myPublicMethod(); // Call the public method } }
public class MyClass {
  static void myStaticMethod() {
    System.out.println("Static methods can be called without creating objects");
  }

  public void myPublicMethod() {
    System.out.println("Public methods must be called by creating objects");
  }

  public static void main(String[ ] args) {
    myStaticMethod(); // Call the static method
    // myPublicMethod(); Σφάλμα κατά την μεταγλώττιση
    MyClass myObj = new MyClass(); // Create an object of MyClass
    myObj.myPublicMethod(); // Call the public method
  }
}

Στο παραπάνω παράδειγμα, η μέθοδος myStaticMethod() είναι στατική και μπορεί να καλεστεί απευθείας χωρίς τη δημιουργία αντικειμένου της κλάσης. Η myPublicMethod() είναι μια δημόσια μέθοδος και πρέπει να καλείται μέσω αντικειμένων της κλάσης.

Μια αφαιρετική μέθοδος ανήκει σε μια αφαιρετική κλάση και δεν έχει σώμα. Το σώμα παρέχεται από την υποκλάση:

Παράδειγμα:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
abstract class Animal {
public abstract void animalSound();
public void sleep() {
System.out.println("Zzz");
}
}
class Cat extends Animal {
public void animalSound() {
System.out.println("The cat says: Meow");
}
}
public class Main {
public static void main(String[] args) {
Cat myCat = new Cat(); // Create a Cat object
myCat.animalSound(); // Call the abstract method
myCat.sleep(); // Call the regular method
}
}
abstract class Animal { public abstract void animalSound(); public void sleep() { System.out.println("Zzz"); } } class Cat extends Animal { public void animalSound() { System.out.println("The cat says: Meow"); } } public class Main { public static void main(String[] args) { Cat myCat = new Cat(); // Create a Cat object myCat.animalSound(); // Call the abstract method myCat.sleep(); // Call the regular method } }
abstract class Animal {
  public abstract void animalSound();
  public void sleep() {
    System.out.println("Zzz");
  }
}

class Cat extends Animal {
  public void animalSound() {
    System.out.println("The cat says: Meow");
  }
}

public class Main {
  public static void main(String[] args) {
    Cat myCat = new Cat(); // Create a Cat object
    myCat.animalSound(); // Call the abstract method
    myCat.sleep(); // Call the regular method
  }
}

Στο παραπάνω παράδειγμα, η μέθοδος animalSound() είναι αφαιρετική, δηλώνεται στην αφαιρετική κλάση Animal αλλά δεν έχει υλοποίηση σε αυτή την κλάση. Η υλοποίηση γίνεται στην υποκλάση Cat. Η μέθοδος sleep() δεν είναι αφαιρετική και δηλώνεται και υλοποιείται στην κλάση Animal. Η μέθοδος main() δημιουργεί ένα αντικείμενο της κλάσης Cat και καλεί την αφαιρετική μέθοδο animalSound() και την κανονική μέθοδο sleep().

15 Μαΐου, 2023
top
error: Content is protected !!
Μετάβαση σε γραμμή εργαλείων