JAVA
인터페이스 (interface)
인디아나쥰이
2021. 7. 11. 22:57
인터페이스란?
일종의 추상클래스.
추상클래스 처럼 추상메서드를 갖지만 추상화 정도가 더 높고, 추상클래스와 달리 몸통을 갖춘 일반 메서드 또는 멤버변수를 구성원으로
가질 수 없다.
오직 추상메서드와 상수만을 멤버로 가질 수 있으며, 그 외의 다른 어떠한 요소도 허용하지 않는다.
인터페이스의 작성
interface 인터페이스이름{
public static final 타입 상수이름 = 값;
public abstract 메서드이름(매개변수목록);
}
※인터페이스 멤버들의 제약사항
-모든 멤버변수는 public static final 이어야하며, 이를 생략할 수 있다.
-모든 메서드는 public abstract 이어야하며, 이를 생략 할 수 있다.(static메서드와 디폴트 메서드는 예외 : jdk1.8부터)
인터페이스의 상속
클래스와는 달리 다중상속이 가능하다.
interface Movable{
void move(int x, int y);
}
interface Attackable {
void attack(Unit u);
}
interface Fightable extends Movable, Attackable {}
인터페이스의 구현
인터페이스도 추상클래스처럼 그 자체로는 인스턴스를 생성할 수 없으며, 추상클래스가 상속을 통해 추상메서드를 완성하는 것처럼,
인터페이스도 자신에 정의된 추상메서드의 몸통을 만들어주는 클래스를 작성하여야 하는데,
키워드는 'implements'를 사용한다.
class 클래스이름 implements 인터페이스이름 {
//인터페이스에 정의된 추상메서드를 구현해야 한다.
}
class Fighter implements Fightable {
public void move(int x, int y) {/*내용생략*/}
public void attack(Unit u) {/*내용생략*/}
}
그러나 만약 구현하는 인터페이스 메서드 중 일부만 구현한다면,
abstract를 붙여서 추상클래스로 선언해야한다.
abstract class Fighter implements Fightable {
public void move(int x, int y) {/*내용 생략*/}
}
그리고 동시에 상속과 구현을 할 수도 있다.
class Fighter extends Unit implements Fightable {
public void move(int x, int y) {/*내용 생략*/}
public void attack(Unit u) {/*내용 생략*/}
}
728x90
반응형