java&spring
인터페이스(interface)
sungjine
2016. 8. 6. 21:19
반응형
- 인터페이스(interface)
1. 추상 메소드와 상수만을 가질 수 있다.
2. 모든 메소드는 public abstract가 자동으로 붙기 때문에 생략이 가능하다.
3. 모든 상수는 public static final이 자동으로 붙기 때문에 생략이 가능하다.
인터페이스는 클레스가 가져야 하는 규약만을 정의하고 인터페이스를 상속받는 클레스는 인터페이스에 정의 되어있는 모든 메소드를 정의 해야 한다. 즉 인터페이스는 빈통을 만들고 클레스가 그 빈통을 채우는 형식이다.
사용법은 아래와 같다.
interface TestI {
int a = 10; // public static final int a = 10;과 같다
int add(); // public abstract int add();와 같다.
}
인터페이스는 implements를 통해서 상속할 수 있다.
class TestA implements TestI {
int add(){ return 1+10; }
}
인터페이스는 다중 상속이 가능하다.
interface TestII {
int minus();
}
class TestA implements TestI, TestII {
int add() { return 1+10; }
int minus() { return 10-1; }
}
인터페이스간 상속이 가능하다.
interface TestII {
int minus();
}
interface TestI extends TestII {
int add();
}
class TestA implements TestI {
int add() { return 1+10; }
int minus() { return 10-1; }
}
주의할점은 interface에 interface를 상속할 때는 extends를 사용하고 interface가 아니라면 implements를 사용해야 된다는 것이다.
* 자바 8에 추가된 내용 *
1. 디폴트 메소드
기존 규약만을 정의 하던 인터페이스에서 메소드를 직접 정의할 수 있게 되었다.
interface TestI{
default int add(){
return 1+10;
}
int minus();
}
class TestA implements TestI{
int minus() { return 10-1; }
}
디폴트 메소드 또한 오버라이딩을 통해 재정의할 수 있다.
class TestA implements TestI{
int add() { return 10+1; }
int minus() { return 10-1; }
}
2. 정적 메소드
일반적인 static메소드와 사용방법은 동일하다.
interface TestI{
static int add(){
return 1 + 10;
}
}
TestI.add(); 로 사용이 가능하다.
반응형