Domanda

Come può una classe anonima estendere una superclasse o implementare un'interfaccia?

È stato utile?

Soluzione

Classi anonime dovere estendere o implementare qualcosa, come qualsiasi altra classe Java, anche se è giusto java.lang.Object.

Per esempio:

Runnable r = new Runnable() {
   public void run() { ... }
};

Qui, r è un oggetto di una classe anonima che implementa Runnable.

Una classe anonima può estendere un'altra classe usando la stessa sintassi:

SomeClass x = new SomeClass() {
   ...
};

Quello che non puoi fare è implementare più di un'interfaccia. Hai bisogno di una classe nominata per farlo. Né una classe interiore anonima, né una classe nominata, tuttavia, possono estendere più di una classe.

Altri suggerimenti

Una classe anonima di solito implementa un'interfaccia:

new Runnable() { // implements Runnable!
   public void run() {}
}

JFrame.addWindowListener( new WindowAdapter() { // extends  class
} );

Se intendi se puoi implementare 2 o più interfacce, di quanto penso non sia possibile. Puoi quindi creare un'interfaccia privata che combina i due. Anche se non posso facilmente immaginare perché vorresti che una classe anonima abbia questo:

 public class MyClass {
   private interface MyInterface extends Runnable, WindowListener { 
   }

   Runnable r = new MyInterface() {
    // your anonymous class which implements 2 interaces
   }

 }

Classi anonime sempre estendere le interfacce superclasse o implementa. per esempio:

button.addActionListener(new ActionListener(){ // ActionListener is an interface
    public void actionPerformed(ActionEvent e){
    }
});

Inoltre, sebbene la classe anonima non possa implementare più interfacce, è possibile creare un'interfaccia che estenda altre interfaccia e consentire alla tua classe anonima di implementarla.

// The interface
interface Blah {
    void something();
}

...

// Something that expects an object implementing that interface
void chewOnIt(Blah b) {
    b.something();
}

...

// Let's provide an object of an anonymous class
chewOnIt(
    new Blah() {
        @Override
        void something() { System.out.println("Anonymous something!"); }
    }
);

Una classe anonima si sta estendendo o implementando durante la creazione del proprio oggetto, ad esempio:

Interface in = new InterFace()
{

..............

}

Qui la classe anonima sta implementando l'interfaccia.

Class cl = new Class(){

.................

}

Qui la classe anonima sta estendendo una classe astratta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top