프로젝트 구성
인터페이스는 추상설계로 본체를 채우지 못함.
그렇기 떄문에 구현한 클래스에서 재정의가 필수로 요구된다.
이렇게하면 인터페이스를 구현할 준비가 완료되고, 나머지 클래스를 생성 후 이용하면 된다.
인터페이스를 다른클래스에서도 이용할 때는 그곳의 생서자를 만든 후 this를 통해 보낸다.
받는 클래스에서는 이렇게 인터페이스명을 이용해 변수를 생성 후, 그 변수를 이용해 생성메소드를 만들어 저장한다. 이렇게 하면 이 클래스에서도 인터페이스가 사용 가능하다.
그 후에 다운로드 클래스 완성.
웹 클래스에서 인터페이스 재 정의 완성
메인메뉴에서 웹 하나 생성하여 실행하기.
3초 후 다운로드를 성공하였다고 뜬다.
완료!
상세 코드
CallBack.java
package callback;
public class CallBack {
public static void main(String[] args) {
// TODO Auto-generated method stub
Web browser = new Web();
browser.clickImage();
}
}
Download.java
package callback;
import java.lang.Thread;
import java.lang.InterruptedException;
public class Download {
private OnDownloadListener listener;
public Download(OnDownloadListener name) {
listener = name;
}
public void Start() {
//다운로드 메소드 아직 안 배움 했다고 칩시다!
System.out.println("다운로드를 시작합니다.");
try {
Thread.sleep(3000);
listener.OnDownloadSuccess();
} catch (InterruptedException e) {
System.out.println(e.getMessage());
listener.OnDownloadFail();
}
}
}
OnDownloadListener.java
package callback;
public interface OnDownloadListener {
//다운로드했을 때의 상황 설계
public void OnDownloadSuccess();
public void OnDownloadFail();
}
Web.java
package callback;
public class Web implements OnDownloadListener{
public void clickImage() {
Download download = new Download(this);
download.Start();
}
@Override
public void OnDownloadSuccess() {
System.out.println("다운로드를 성공하였습니다.");
}
@Override
public void OnDownloadFail() {
System.out.println("다운로드를 실패하였습니다.");
}
}