¿Cómo puede una clase anónima usar “extender” o “implementar”?

¿Cómo puede una clase anónima extender una superclase o implementar una interfaz?

Las clases anónimas deben extender o implementar algo, como cualquier otra clase de Java, incluso si es solo java.lang.Object .

Por ejemplo:

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

Aquí, r es un objeto de una clase anónima que implementa Runnable .

Una clase anónima puede ampliar otra clase con la misma syntax:

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

Lo que no puedes hacer es implementar más de una interfaz. Necesitas una clase con nombre para hacer eso. Ni una clase interna anónima, ni una clase nombrada, sin embargo, pueden extender más de una clase.

Una clase anónima generalmente implementa una interfaz:

 new Runnable() { // implements Runnable! public void run() {} } JFrame.addWindowListener( new WindowAdapter() { // extends class } ); 

Si te refieres a si puedes implementar 2 o más interfaces, entonces creo que eso no es posible. A continuación, puede hacer una interfaz privada que combine los dos. Aunque no puedo imaginar fácilmente por qué querrías que una clase anónima tuviera eso:

  public class MyClass { private interface MyInterface extends Runnable, WindowListener { } Runnable r = new MyInterface() { // your anonymous class which implements 2 interaces } } 

Las clases anónimas siempre extienden la superclase o implementan interfaces. por ejemplo:

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

Además, aunque la clase anónima no puede implementar múltiples interfaces, puede crear una interfaz que amplíe otra interfaz y permita que su clase anónima la implemente.

 // 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 clase anónima se está extendiendo o implementando al crear su objeto Por ejemplo:

 Interface in = new InterFace() { .............. } 

Aquí la clase anónima está implementando la interfaz.

 Class cl = new Class(){ ................. } 

aquí la clase anónima está extendiendo una clase abstracta.