Как анонимный класс может использовать "расширяет" или "реализует"?

Как анонимный класс может расширить суперкласс или реализовать интерфейс?

Ответ 1

Анонимные классы должны расширять или реализовывать что-то, как и любой другой класс Java, даже если это просто java.lang.Object.

Например:

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

Здесь r - это объект анонимного класса, который реализует Runnable.

Анонимный класс может расширять другой класс, используя тот же синтаксис:

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

То, что вы не можете сделать, это реализовать более одного интерфейса. Для этого нужен именованный класс. Однако ни анонимный внутренний класс, ни именованный класс не могут распространяться более чем на один класс.

Ответ 2

Анонимный класс обычно реализует интерфейс:

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

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

Если вы имеете в виду, можете ли вы реализовать 2 или более интерфейсов, чем я думаю, что это невозможно. Затем вы можете создать частный интерфейс, который объединяет два. Хотя я не могу себе представить, почему вы хотите, чтобы анонимный класс имел это:

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

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

 }

Ответ 3

Анонимные классы всегда расширяют суперкласс или реализуют интерфейсы. например:

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

Кроме того, хотя анонимный класс не может реализовать несколько интерфейсов, вы можете создать интерфейс, который расширяет другой интерфейс и позволяет анонимному классу реализовать его.

Ответ 4

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

...

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

...

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

Ответ 5

Анонимный класс расширяется или реализуется при создании своего объекта Например:

Interface in = new InterFace()
{

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

}

Здесь анонимный класс реализует интерфейс.

Class cl = new Class(){

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

}

здесь анонимный класс расширяет абстрактный класс.