Java Nested Static Class

Σε αυτό το σεμινάριο, θα μάθετε για ένθετη στατική τάξη με τη βοήθεια παραδειγμάτων. Θα μάθετε επίσης πώς διαφέρει οι στατικές τάξεις από τις εσωτερικές τάξεις.

Όπως μάθαμε σε προηγούμενα μαθήματα, μπορούμε να έχουμε μια τάξη μέσα σε μια άλλη τάξη στην Java. Τέτοιες τάξεις είναι γνωστές ως ένθετες τάξεις. Στην Java, οι ένθετες τάξεις είναι δύο τύπων:

  • Ένθετη μη στατική τάξη (Εσωτερική τάξη)
  • Ένθετη στατική τάξη.

Έχουμε ήδη συζητήσει εσωτερικές τάξεις στο προηγούμενο σεμινάριο. Επισκεφθείτε την Java Nested Class εάν θέλετε να μάθετε για τις εσωτερικές τάξεις.

Σε αυτό το σεμινάριο, θα μάθουμε για ένθετες στατικές τάξεις.

Java Nested Static Class

Χρησιμοποιούμε τη λέξη-κλειδί staticγια να κάνουμε την ένθετη τάξη μας στατική.

Σημείωση: Στην Java, μόνο οι ένθετες τάξεις επιτρέπεται να είναι στατικές.

Όπως οι κανονικές τάξεις, οι στατικές ένθετες τάξεις μπορούν να περιλαμβάνουν τόσο στατικά όσο και μη στατικά πεδία και μεθόδους. Για παράδειγμα,

 Class Animal ( static class Mammal ( // static and non-static members of Mammal ) // members of Animal ) 

Οι στατικές ένθετες τάξεις σχετίζονται με την εξωτερική τάξη.

Για να αποκτήσετε πρόσβαση στη στατική ένθετη τάξη, δεν χρειαζόμαστε αντικείμενα της εξωτερικής τάξης.

Παράδειγμα: Στατική ένθετη τάξη

 class Animal ( // inner class class Reptile ( public void displayInfo() ( System.out.println("I am a reptile."); ) ) // static class static class Mammal ( public void displayInfo() ( System.out.println("I am a mammal."); ) ) ) class Main ( public static void main(String() args) ( // object creation of the outer class Animal animal = new Animal(); // object creation of the non-static class Animal.Reptile reptile = animal.new Reptile(); reptile.displayInfo(); // object creation of the static nested class Animal.Mammal mammal = new Animal.Mammal(); mammal.displayInfo(); ) ) 

Παραγωγή

Είμαι ερπετό. Είμαι θηλαστικό.

Στο παραπάνω πρόγραμμα, έχουμε δύο ένθετα τάξη Mammal και Reptile μέσα σε μια τάξη Animal.

Για να δημιουργήσουμε ένα αντικείμενο του μη στατικού Reptile κλάσης, χρησιμοποιήσαμε

 Animal.Reptile reptile = animal.new Reptile() 

Για να δημιουργήσουμε ένα αντικείμενο της στατικής τάξης Mammal, χρησιμοποιήσαμε

 Animal.Mammal mammal = new Animal.Mammal() 

Πρόσβαση σε μέλη εξωτερικής τάξης

Στην Java, οι στατικές ένθετες τάξεις σχετίζονται με την εξωτερική κλάση. Αυτός είναι ο λόγος για τον οποίο οι στατικές ένθετες τάξεις μπορούν να έχουν πρόσβαση μόνο στα μέλη της τάξης (στατικά πεδία και μεθόδους) της εξωτερικής τάξης.

Ας δούμε τι θα συμβεί αν προσπαθήσουμε να αποκτήσουμε πρόσβαση σε μη στατικά πεδία και μεθόδους της εξωτερικής τάξης.

Παράδειγμα: Πρόσβαση σε μη στατικά μέλη

 class Animal ( static class Mammal ( public void displayInfo() ( System.out.println("I am a mammal."); ) ) class Reptile ( public void displayInfo() ( System.out.println("I am a reptile."); ) ) public void eat() ( System.out.println("I eat food."); ) ) class Main ( public static void main(String() args) ( Animal animal = new Animal(); Animal.Reptile reptile = animal.new Reptile(); reptile.displayInfo(); Animal.Mammal mammal = new Animal.Mammal(); mammal.displayInfo(); mammal.eat(); ) ) 

Παραγωγή

Main.java:28: σφάλμα: δεν μπορώ να βρω το σύμβολο mammal.eat (); σύμβολο: μέθοδος eat () τοποθεσία: μεταβλητό θηλαστικό τύπου Mammal 1 σφάλμα μεταγλωττιστή κατάσταση εξόδου 1

Στο παραπάνω παράδειγμα, έχουμε δημιουργήσει μια μη στατική μέθοδο eat()μέσα στην τάξη Animal.

Τώρα, εάν προσπαθήσουμε να αποκτήσουμε πρόσβαση eat()χρησιμοποιώντας το αντικείμενο θηλαστικό, ο μεταγλωττιστής εμφανίζει ένα σφάλμα.

Επειδή το θηλαστικό είναι αντικείμενο μιας στατικής τάξης και δεν μπορούμε να έχουμε πρόσβαση σε μη στατικές μεθόδους από στατικές τάξεις.

Στατική κατηγορία ανώτατου επιπέδου

Όπως αναφέρθηκε παραπάνω, μόνο οι ένθετες τάξεις μπορούν να είναι στατικές. Δεν μπορούμε να έχουμε στατικές τάξεις ανώτερου επιπέδου.

Ας δούμε τι θα συμβεί αν προσπαθήσουμε να κάνουμε μια στατική κορυφαίας κατηγορίας.

 static class Animal ( public static void displayInfo() ( System.out.println("I am an animal"); ) ) class Main ( public static void main(String() args) ( Animal.displayInfo(); ) ) 

Παραγωγή

 Main.java :: σφάλμα: τροποποιητής στατικής δεν επιτρέπεται εδώ στατική κλάση Animal (1 κατάσταση μεταγλωττιστή κατάσταση εξόδου 1 

Στο παραπάνω παράδειγμα, προσπαθήσαμε να δημιουργήσουμε μια στατική τάξη Animal. Δεδομένου ότι η Java δεν επιτρέπει στατική κλάση ανώτερου επιπέδου, θα λάβουμε ένα σφάλμα.

ενδιαφέροντα άρθρα...