질문하신 부분이 안드로이드에서 가장 중요한 핵심이 되는 부분이고,
인터페이스를 사용하는 6가지 방법을 차례대로 공부하셔야 되는데, 중요한 몇가지만 짚고 넘어가겠습니다.
일단 먼저 기억하셔야 할것은 함수의 파라메터가 인터페이스라는 의미는 인터페이스를 구현한 인스턴스라는겁니다.
6가지 방법중
1)번은 MyActivity.java라고 한다면 선언부에서 implements aInterface로 하고 testmethod()함수를 오버라이딩하는 방법
2)번은 aInterface를 구현한 내부 클래스를 선언하는 방법
즉, 액티비티 내부에
class MyClass implements ainterface {
@Override
testmethod() {} //구현
}
그리고,
MyClass mMyClass = new MyClass();
mMyClass.testmethod(); 이렇게 사용하는 방법
이 방법은 실제 필요로 하지 않는 MyClass라는 이너 클래스가 더 들어가조,
실제 컴파일하게 되면 액티비티가 MyActivity.java라고 가정한다면 MyActivity.class, MyActivity$MyClass.class라는 두개의 클래스가 생성됩니다.
3,4) 생략
5) 익명 클래스 사용 방법
익명 클래스 사용 문법은 인스턴스 생성 문법과 같지만 끝에 {} 와 세미콜론을 붙이고 필요한 함수를 오버로딩합니다.
aInterface a = new aInterface(); 이렇게만 하면 인스턴스 생성문법이조. 그렇지만
aInterface a = new aInterface() {
testmethod(); //구현부
};
이렇게 하는게 익명 클래스이고 실제 컴파일을 하게 되면 MyActivity.class 와 MyActivity$1.class 라는 익명클래스가
생성되게 됩니다. 2번처럼 클래스 이름이 없어서 $1 이라고 번호를 붙이게 됩니다.
그렇지만 여기서 기억해 주셔야 할것은 이것도 2번과 같은 인스턴스라는 것입니다.
6)번 익명클래스 Inner Type 은 5번을 좀 더 간략화한것입니다.
aInterface라는 이름도 필요없을때 즉 함수의 파라메터가 인터페이스일 경우,
button.setOnAListener(aInterface a) 이렇게 함수의 파라메터가 인터페이스라면
인터페이스를 구현한 인스턴스를 넣어라는 의미입니다.
그런데 이걸 제일 쉽게 해주는게 6번이고, 아래와 같이 해주는겁니다.
button.setOnAListener(new aInterface() {
testmethod();//구현부
});
제가학원에서 강의할때도 이렇게 설명을 해줘도 이해를 못하는 분들이 너무 많더군요...
아무쪼록 참고가 되시길,,,