2011-05-01 3 views

답변

79

익명 클래스 은 다른 Java 클래스와 마찬가지로 java.lang.Object인데도 확장하거나 구현해야합니다. 예를 들어

: 여기

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

, rRunnable 구현 익명 클래스의 오브젝트이다.

익명의 클래스는 동일한 구문을 사용하여 다른 클래스를 확장 할 수 있습니다 : 당신이 할 수없는 것은 하나 이상의 인터페이스를 구현하는 것입니다

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

. 이름을 지정하는 클래스가 필요합니다. 그러나 익명의 내부 클래스 나 명명 된 클래스는 둘 이상의 클래스를 확장 할 수 없습니다. 당신은 내가 그 불가능이 생각하는 것보다, 이상의 인터페이스를 구현할 수 있는지 여부를

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

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

을 의미하는 경우 :

+0

두 번째 표현이 정확하다고 생각하지 않습니다. 이미 클래스 이름을 SomeClass로 선언 했으므로 더 이상 익명이 아닙니다. http://docstore.mik.ua/orelly/java-ent/jnut/ch03_12.htm 인터페이스를 "새로"만들면 "Object"클래스를 확장하고 해당 인터페이스를 구현하여 익명 클래스를 만듭니다. 그러나 당신이 작성한 첫 번째 표현식을 가진 클래스를 "새롭게하는"동안, 익명 클래스 (사실 익명 클래스가 생성 된 인스턴스 임)는 해당 클래스를 확장하여 생성됩니다. – lixiang

+6

@youmiss : 두 번째 표현식은 'SomeClass'를 확장하는 익명 클래스의 인스턴스를 생성합니다. '{...} '때문에 여전히 익명입니다. – skaffman

+1

나는 {...}을 간과했다. – lixiang

32

익명의 클래스는 일반적으로 인터페이스를 구현합니다. 그런 다음 둘을 결합한 개인 인터페이스를 만들 수 있습니다. 당신이 원하는 왜 내가 쉽게 상상할 수 없지만 익명 클래스는이합니다 :

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

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

} 
15

익명 클래스 항상는 슈퍼 클래스를 확장하거나 인터페이스를 구현합니다. 예를 들어 : 익명 클래스는 여러 인터페이스를 구현할 수 있지만

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

는 또한, 다른 인터페이스를 확장하는 인터페이스를 작성하고 익명 클래스를 구현하도록 할 수 있습니다.

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

익명 클래스 연장하거나 예를 들어 그 오브젝트 생성시 실행된다

Interface in = new InterFace() 
{ 

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

} 

여기 익명 클래스 인터페이스를 구현한다.

Class cl = new Class(){ 

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

} 

여기 익명의 클래스는 추상 클래스를 확장하고 있습니다.

+0

차이가 보이지 않습니다.네가 어떻게 다른지 내거야. – trapedInBatcaveWithBAtman