답변:
익명 클래스 는 다른 Java 클래스와 마찬가지로 확장하거나 구현 해야합니다java.lang.Object
.
예를 들면 :
Runnable r = new Runnable() {
public void run() { ... }
};
여기에 r
를 구현하는 익명 클래스의 객체가 Runnable
있습니다.
익명 클래스는 동일한 구문을 사용하여 다른 클래스를 확장 할 수 있습니다.
SomeClass x = new SomeClass() {
...
};
할 수없는 것은 둘 이상의 인터페이스를 구현하는 것입니다. 그렇게하려면 명명 된 클래스가 필요합니다. 그러나 익명 내부 클래스 나 명명 된 클래스는 둘 이상의 클래스를 확장 할 수 없습니다.
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
}
}
아무도 그 질문을 이해하지 못한 것 같습니다. 이 사람이 원했던 것은 다음과 같았습니다.
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(){
.................
}
여기서 익명 클래스는 추상 클래스를 확장합니다.