: 클래스는 아니지만 클래스처럼 사용되어지는 기능이다.
: 자바는 다중 상속이 안되기 때문에 그를 보완하기 위해서 사용된다.
: 인터페이스는 메소드와 멤버변수를 선언할 수 있는데, 메소드는 구현물을 가진 메소드를 만들지 못하고 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(); } }
- 결과