2013년 6월 27일 목요일

(130627) 4일차 InterFaceExamTest.java (Interface 설명, 테스트)

 - 인터페이스 
 : 클래스는 아니지만 클래스처럼 사용되어지는 기능이다.
 : 자바는 다중 상속이 안되기 때문에 그를 보완하기 위해서 사용된다.
 : 인터페이스는 메소드와 멤버변수를 선언할 수 있는데, 메소드는 구현물을 가진 메소드를 만들지 못하고 abstract 메소드만 가질 수 있다.
 : 즉, 인터페이스를 implements 받으면 그 인터페이스 안에 있는 메소드들은 전부 오버라이딩 해야한다.
 : 고급 프로그래밍일수록 클래스와 인터페이스를 같이 사용한다.

 - 자바로 박쥐, 펭귄 구현하기
class 포유류 extends 동물{
새끼를 낳는다.
젖을 먹인다.
}
class 날아다닌다 {
어떻게든 수단과 방법을 가리지 않고 
          자기 힘 만으로 날아다닌다.
}
class 박쥐 extends 포유류, 날아다닌다.{} (X)
//단일 상속 위배! 위와 같이 박쥐class를 만들 수 없다.

 - implememts interface1, interface2, …
class 포유류 extends 동물{
새끼를 낳는다.
젖을 먹인다.
}
interface 날아다닌다 {
어떻게든 수단과 방법을 가리지 않고 
          자기 힘 만으로 날아다닌다.
}
class 박쥐 extendes 포유류 implements 날아다닌다{} 
// 박쥐는 class 포유류 하나만 상속을 받았다. 
// 박쥐는 interface 날아다닌다 를 구현했다.
// interface는 class가 아니므로 여러 개를 구현해도 무방.


 - 소스
class Sanyo{
public void getRadio(){
System.out.println("음악을 들어요");
}
}

interface Cheese{
 int money = 10; // 인터페이스에서의 변수는 final이므로 초기화 꼭 필요(변경 안됨)
public abstract void getEat(); // 인터페이스에서는 abstrat 키워드를 안써줘도 됨
}

interface Coffee{
public void getCoffee();
}

public class InterFaceExamTest extends Sanyo implements Cheese, Coffee{

@Override
public void getEat() {
System.out.println("치즈 먹어");

  // Sanyo s = new InterFaceExamTest();
  // Cheese c = new InterFaceExamTest();

  // InterFaceExamTest ife = (InterFaceExamTest) new Sanyo();
}

@Override
public void getCoffee() {
System.out.println("커피 먹어");
}

 public static void main(String[] args) {
Sanyo s = new Sanyo();
InterFaceExamTest In = new InterFaceExamTest(); s.getRadio(); In.getEat(); In.getCoffee(); } }


- 결과