2011-08-16 8 views
2

OnClickListener는 정적 인터페이스이지만 OnClickListener에서 인스턴스를 생성합니다.OnClickListener 인터페이스에서 개체 만들기

나는 자바의 인터페이스에서 객체를 생성 할 수 있는지 궁금하고 혼란 스럽다.

왜 우리는 OnClickListener 인터페이스에서 상속하는 구체적인 클래스를 만들지 않습니까? enter image description here

enter image description here

+1

정적 인터페이스 란 무엇입니까? 당신은 인터페이스에서 객체를 생성하지 않습니다. 실제로는 인터페이스의 인라인 구현을 생성하고 있습니다 ... – DeyyyFF

+0

_ 왜 OnClickListener 인터페이스에서 상속 받았는지 구체적 클래스를 만들지 않습니까? _ 바로 그 일은 속기 표기법에서만 가능합니다 . – biziclop

+0

하지만 새로운 단어가 있습니다. 새로운 OnClickListener는 동등한 클래스 Hoob이 OnClickListener를 구현합니까? 새로운 단어가 개체를 생성하는 데 사용하고 있지 않습니까? – uzay95

답변

5

을 인터페이스의 구현을 생성하고 tv_onClick 변수에 저장됩니다. 자바 스탠다드 에디션의 스윙 문서는 here을 다루고 있으며, 안드로이드 개발과 거의 같은 목적으로 사용되었다고 생각합니다. 이벤트를 발생시키는 구성 요소에 다양한 이벤트 처리기 인터페이스를 연결하기 만하면됩니다. 예를 들어,이 OnClickListener에서 수행되는 액션이 ​​다른 곳에서는 절대로 필요하지 않은 경우 이제는 사용되는 클래스로만 제한되었습니다. 소스 트리에 다른 클래스 파일이 필요 없으며 특정 UI 구성 요소에서 어떤 일이 벌어지고 있는지 좀 더 분명하게 알 수 있습니다.

뒤에서 컴파일러는 자동으로 생성 된 이름을 가진 클래스를 만들고 있는데 실제로는 OnClickListener을 구현합니다. com.foo.Class$1이라는 클래스와 함께 스택 추적에서이를 볼 수 있습니다. 그 $1 컴파일러는 귀하의 클래스에 대해 생성합니다.

+0

com.foo.Class $ 1 건 +1. 그걸 몰랐는데 :) – Prine

+0

그래, 어디서 읽었는지 잊어 버렸지 만, Sun 문서에서 즉시 명백한 것은 아니었다. 나는 그것이 실제 언어 스펙에서 더 정확하게 지정되었다고 추측하고있다. –

1

당신은 인터페이스를 인스턴스화되지 않습니다. 당신이 다음 코드를 사용하고있는 것은 바로 ... 익명의 내부 클래스로 알려져 있습니다 무엇

private OnClickListener tv_onClick = new OnClickListener() { 
    public void onClick(View arg0) { } 
}