익명 클래스는 “확장”또는 “구현”을 어떻게 사용할 수 있습니까? 수퍼 클래스를 확장하거나 인터페이스를 구현할 수

익명의 클래스는 어떻게 수퍼 클래스를 확장하거나 인터페이스를 구현할 수 있습니까?



답변

익명 클래스 다른 Java 클래스와 마찬가지로 확장하거나 구현 해야합니다java.lang.Object .

예를 들면 :

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

여기에 r를 구현하는 익명 클래스의 객체가 Runnable있습니다.

익명 클래스는 동일한 구문을 사용하여 다른 클래스를 확장 할 수 있습니다.

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

할 수없는 것은 둘 이상의 인터페이스를 구현하는 것입니다. 그렇게하려면 명명 된 클래스가 필요합니다. 그러나 익명 내부 클래스 나 명명 된 클래스는 둘 이상의 클래스를 확장 할 수 없습니다.


답변

익명 클래스는 일반적으로 인터페이스를 구현합니다.

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
   }

 }

답변

익명 클래스는 항상 슈퍼 클래스 확장하거나 인터페이스를 구현합니다. 예를 들면 :

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

또한 익명 클래스는 여러 인터페이스를 구현할 수 없지만 다른 인터페이스를 확장하는 인터페이스를 만들고 익명 클래스가이를 구현하도록 할 수 있습니다.


답변

아무도 그 질문을 이해하지 못한 것 같습니다. 이 사람이 원했던 것은 다음과 같았습니다.

return new (class implements MyInterface {
    @Override
    public void myInterfaceMethod() { /*do something*/ }
});

이것은 다중 인터페이스 구현과 같은 것을 허용하기 때문입니다.

return new (class implements MyInterface, AnotherInterface {
    @Override
    public void myInterfaceMethod() { /*do something*/ }

    @Override
    public void anotherInterfaceMethod() { /*do something*/ }
});

이것은 정말로 정말 좋을 것입니다. 하지만 Java에서는 허용되지 않습니다 .

수있는 일은 메서드 블록 내부에서 로컬 클래스를 사용하는 것입니다 .

public AnotherInterface createAnotherInterface() {
    class LocalClass implements MyInterface, AnotherInterface {
        @Override
        public void myInterfaceMethod() { /*do something*/ }

        @Override
        public void anotherInterfaceMethod() { /*do something*/ }
    }
    return new LocalClass();
}

답변

// 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!"); }
    }
);

답변

익명 클래스는 객체를 생성하는 동안 확장 또는 구현됩니다. 예 :

Interface in = new InterFace()
{

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

}

여기서 익명 클래스는 인터페이스를 구현합니다.

Class cl = new Class(){

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

}

여기서 익명 클래스는 추상 클래스를 확장합니다.