2013-09-28 7 views
-1

인터페이스는 참조 할 수 있지만 객체는 작성할 수 없습니다. 그러나 우리는 어떻게 Thread 생성자에 새로운 Runnable()을 전달할 수 있는가? 내가 아는 한 콘서트는 새로운 Class_Name()이 객체입니다.스레드에 대한 혼란

Thread t = new Thread(new Runnable(){}); 
+3

질문에 "참조"가 아니라 "인스턴스"를 말합니다. 사람들이 당신을 이해하기 원한다면 올바른 어휘를 사용하는 것이 매우 중요합니다. 클래스/추상 클래스/인터페이스 –

답변

3

여기에서 사용 된 속임수는 anonymous classes입니다. 기본적으로 Runnable을 구현하는 새로운 익명 클래스의 개체를 만듭니다.

더 좋은 예는이 될 것입니다 :

Thread t = new Thread(new Runnable(){ 
    @Override 
    public void run() { 
     // Code here 
    } 
}); 
1

우리는 인터페이스의 참조를 만들 수 있지만 사실이 아니다

개체 수 없습니다. classa가 참조하는 동안

ClassA classa = new ClassA(); 

는를 ClassA에 대한 새로운 인스턴스를 만들 것입니다.

는하지만 어떻게 우리가 t가 참조하는 스레드의 인스턴스를 만들 것입니다 스레드 생성자

Thread t = new Thread(new Runnable(){}); 

이 새의 Runnable()를 전달할 수 있습니다. 새로운 Runnable() {}은 anonymous class이라고합니다. 인스턴스가 생성 되었기 때문에 참조는 생성자에 전달되지만 나중에 코드에서 참조 할 수 없습니다.

하지만이 줄을 사용하면 컴파일 오류가 발생합니다. run 메소드를 대체해야합니다.

Thread t = new Thread(new Runnable(){ 
    @Override 
    public void run(){ 
    } 
}); 
+0

"인스턴스가 생성되었지만 참조가 없으므로"아무것도 참조 할 수 없으므로 질문에 의미가 없습니다. - 사실이 아니다. Runnable에 대한 참조가 아니라면 Thread 생성자가 전달되는 것은 무엇입니까? – Ingo

+0

@Ingo 네, 맞아요. 어쩌면 내 설명에 결함이있다. 생성자는 참조를 얻지 만 그 이후에 사용할 수있는 참조는 없습니다. 나는 아직도 이와 같은 것들을 설명함으로써 고투한다. –