인터페이스란 개발 코드와 객체간의 접점을 의미하는데 추상 메서드의 집합이라고 볼 수있다.
자바 8부터는 디폴트 메소드와 정적 메소드도 추가되었다
추상메서드는 메서드 선언부만 있고 실행문이 없는 메소드를 의미한다
interface 인터페이스이름 { public static final 상수이름 = 값; public abstract 메서드이름(); }
첫자는 대문자로 작성해야 하고 숫자로 시작할 수 없다.
$나 _로 시작하는 것은 가능하나 다른 특수문자는 사용할 수 없다
인터페이스에는 상수만 선언할 수 있고 모두 public으로만 선언해야 한다.
interface InterfaceName {
public static final int AGE = 5;
final int GRADE = 7;
static int POINT = 100;
int NUMBER = 5;
//상수
public abstract String getName();
String className(); //public abstract 생략
default 타입 메소드명(){}
static 타입 메소드명(){}
}
위의 코드처럼 interface 내에서는 상수와 추상 메서드만 호출할 수 있으며 상수의 경우에는 static final을 추상 메서드의 경우에는 public abstract를 생략할 수 있다
default 타입 메서드명(){}
static 타입 메서드명(){}
인터페이스 내에는 default 메서드와 static 메서드도 선언할 수 있는데 이 경우에는 메서드 실행블록까지 포함해서 사용할 수 있다
인터페이스도 상속이 가능하다
하지만 일반적인 객체를 상속받는 것과는 차이가 있는데 인터페이스만 상속할 수 있으며 다중 상속이 가능하다는 점이다.
interface Practice extends Exam, Name{}
즉, 하위 인터페이스에서 상위 인터페이스를 상속하는 것이다
keyword : implements
인터페이스에 정의된 추상메소드를 완성하는 방법
추상클래스의 경우에는 extends 상속을 통해 구현되는 반면 인터페이스는 implements를 사용해서 구현한다
class ClassName implements InterfaceName {
public void name() {}
public void grade() {}
}
인터페이스 내의 추상메서드를 완성하는 것을 인터페이스를 구현한다고 표현한다
abstract class ClassName implements InterfaceName {
public void name() {}
// public void grade() {}
}
인터페이스에서 추상 메소드 중 일부만 구현하는 경우에는 class 앞에 abstract를 붙여주어야 한다