Programing

익명 클래스는 "확장"또는 "구현"을 어떻게 사용할 수 있습니까?

lottogame 2020. 9. 7. 22:26
반응형

익명 클래스는 "확장"또는 "구현"을 어떻게 사용할 수 있습니까?


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


익명 클래스 다른 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){
    }
});

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


// 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(){

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

}

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

참고URL : https://stackoverflow.com/questions/5848510/how-can-an-anonymous-class-use-extends-or-implements

반응형