2016-10-23 2 views
0

일부 Java 메소드에서 Interface 인수가 필요합니다. 인터페이스를 인스턴스화 할 수 없으므로이 인터페이스를 구현하는 모든 클래스의 객체를 인수로 전달할 수 있습니까? 안드로이드리스트 뷰 클래스의 setOnClickListener 방법의 예를 들어 메소드에 대한 인수로 Java 인터페이스

,

setOnItemClickListener(AdapterView.OnItemClickListener listener) 

합니다 (어댑터 뷰 AdapterView 추상 클래스에서 중첩)을 OnItemClickListener 인터페이스는 인수로 필요합니다.

여기에 전달해야 할 대상은 무엇입니까?

미리 감사드립니다.

+1

'이 인터페이스를 구현하는 모든 클래스의 객체를 인수로 전달할 수 있습니까? 예 – pskink

+0

예, 다형성을 살펴보십시오. – Brunaldo

답변

2

예 - 인터페이스 유형이 인수로 필요하면이 인터페이스를 구현하는 클래스의 모든 객체를 전달할 수 있습니다.

예 :

// the method 
void myMethod(MyInterface object) { ... } 

// the interface 
interface MyInterface { 

    void interfaceMethod(); 

} 

// class implementing the interface 
class MyImplementation implements MyInterface { 

    void interfaceMethod() { 
     // ... 
    } 

} 

는 이제이 도움이

MyInterface object = new MyImplementation(); 
myMethod(object); 

희망 할 수있다!

0

What Is an Interface? 좋은 explaination 인터페이스를 구현

에게 제공하는 클래스가 제공 할 것을 약속 동작에 대한 자세한 형식이 될 수 있습니다.

그래서 필요한 인터페이스로 모든 클래스를 구현하고이 클래스의 객체를 리스너로 제공 할 수 있습니다. 또한 안드로이드 개발 내에서 광범위하게 수행되는 것처럼 익명의 내부 클래스로 인터페이스를 구현할 수 있습니다.

setOnItemClickListener(new AdapterView.OnItemClickListener(){ 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     .... 
    } 
}); 
0

글쎄, 단단하게 질문을 공식화하면 더 잘 소화하는 데 도움이됩니다.

우리는 다음과 같은 사실로 누르고 있으면 : 인터페이스가 법적으로 단지 구현 된 인터페이스가 요구되는 방법에 인수로 전달 될 수있다 구현하는 클래스의

  1. 개체 (캐스팅없이?).
  2. 인터페이스 변수는이 인터페이스를 구현하는 클래스의 생성 된 객체를 유지할 수 있습니다. 명시 적 캐스팅없이 인터페이스 메소드에만 액세스 할 수 있으며 객체는 추가 메서드가있는 클래스 일 수 있습니다.
  3. 일단 키워드와 "인터페이스 생성자"키워드를 사용하여 인터페이스가 필요한 곳에서 익명 클래스의 객체를 생성하고 해당 인터페이스를 자동으로 구현할 수 있습니다.

그래서 것 같습니다 내 경우에는, 다음과 같은 코드가 :

setOnItemClickListener(new AdapterView.OnItemClickListener(){ 
@Override 
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
    .... 
} 

});

가 자동 AdapterView.OnItemClickListener 인터페이스를 구현 인라인 겹쳐 인터페이스 onItemClick() 방법 및 setOnItemClickListener 함수에 객체를 전달하는 익명 클래스를 인스턴스화한다.

가도 명확하게하기 위해, 위의 코드를 쓸 수 있었다 :

class classDef implements AdapterView.OnItemClickListener{ 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      .... 
     } 
    } 
    classDef myClass = new classDef(); 
    setOnItemClickListener(myClass); 

감사합니다.

관련 문제