Table of Contents

Ανώνυμες εμφωλευμένες κλάσεις

Οι ανώνυμές εμφωλευμένες κλάσεις επιτρέπουν τον ταυτόχρονο ορισμό της υλοποίησης της κλάσης μαζί με την δημιουργία ενός αντικειμένου της κλάσης αυτής, σε μία εντολή. Οι κλάσεις αυτές ΠΡΕΠΕΙ α) να υλοποιούν ένα υφιστάμενο interface ή β) να επεκτείνουν μία υφιστάμενη κλάση. Δείτε το παράδειγμα που παρουσιάστηκε στις μη στατικές εμφωλευμένες κλάσεις αλλαγμένο, ώστε να χρησιμοποιεί ανώνυμες κλάσεις

HelloWorldAnonymousClasses.java
public class HelloWorldAnonymousClasses {
 
  interface HelloWorld {
    public void greet();
    public void greetSomeone(String someone);
  }
 
  public void sayHello() {
 
    class EnglishGreeting implements HelloWorld {
      String name = "world";
      public void greet() {
        greetSomeone("world");
      }
      public void greetSomeone(String someone) {
        name = someone;
        System.out.println("Hello " + name);
      }
    }
 
    HelloWorld englishGreeting = new EnglishGreeting();
 
    HelloWorld frenchGreeting = new HelloWorld() {
      String name = "tout le monde";
      public void greet() {
        greetSomeone("tout le monde");
      }
      public void greetSomeone(String someone) {
        name = someone;
        System.out.println("Salut " + name);
      }
    };
 
    HelloWorld spanishGreeting = new EnglishGreeting() {
      String name = "mundo";
      public void greet() {
        greetSomeone("mundo");
      }
      public void greetSomeone(String someone) {
        name = someone;
        System.out.println("Hola, " + name);
      }
    };
    englishGreeting.greet();
    frenchGreeting.greetSomeone("Fred");
    spanishGreeting.greet();
  }
 
  public static void main(String... args) {
    HelloWorldAnonymousClasses myApp =
      new HelloWorldAnonymousClasses();
    myApp.sayHello();
  }      
}

Παρατηρήστε ότι η μεταβλητή frenchGreeting προκύπτει από μία κλάση που υλοποιεί το inteface HelloWorld η μεταβλητή spanishGreeting προκύπτει ως επέκταση της κλάση EnglishGreeting.

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

Σε αναλογία με τις τοπικές εμφωλευμένες κλάσεις οι ανώνυμες κλάσεις έχουν τις ίδιες δυνατότητες πρόσβασης στις τοπικές μεταβλήτές της μεθόδου στην οποία ορίζονται:

Σε μία ανώνυμη κλάση μπορείτε να ορίσετε τα εξής: