인터페이스(interface)
틀이 극대화
- 추상클래스를 고도화시킨 문법, 반드시 추상메소드와 상수만 선언해야 한다.
- 구현이 되어 있는 것이 없음(틀의 역할만 함)
- 다른 클래스에서 인터페이스를 지정받을 때
implements
를 사용함 - 틀로 받아 올 수 있는 interface의 개수에 제한이 없다.
- 지정 받은 클래스는 인터페이스가 가지고 있는 추상 메소드를 반드시 재정의해야한다.
- 인터페이스는 상수와 추상메소드만 존재하므로 그냥 선언해도 상수와 추상메소드로 선언됨.
public static final 상수
:static final
생략가능abstract 리턴타입 함수명
:abstract
생략가능- interface에는 public 이 필수
jdk 8버전 이후부터는 인터페이스에 default 메소드를 선언할 수 있다. 사실상 다중상속을 지원
- 인터페이스들 끼리 다른 클래스와의 메소드 모호성이 발행한다면 지정, 상속받은 클래스에서 명시적으로 그 메소드를 재정의 해주어 모호성을 해결해주어야한다.
인터페이스에서 상수 선언
public static final
- static : 상수이기 때문에 객체화 없이 사용할 수 있어야 한다.
- final : 상수이기 때문에 바뀌면 안되는 값이다.
인터페이스 사용 이유
자바에서 class 상속은 오로지 부모클래스 하나만 상속 가능
인터페이스는 여러개의 다중상속이 가능하다.
다중 상속 multi interface
public interface Animation{
abstract void watch();
}
public interface Action{
abstract void watch();
}
public class Incredible implements Animation, Action{
@Override
public void watch() {
System.out.println("액션 장르의 애니메이션 영화를 봅니다.");
}
void doSomething() {
//Animation과 Action의 watch() 모두 사용 (다중상속)
Animation.super.watch();
Action.super.watch();
}
}
마크 인터페이스 - 표시를 위한 인터페이스
class B extends A implements C
- 클래스 B는 A의 자식 클래스이자, C의 인터페이스를 가진다.
ex) if( list[i] instanceof C ) ...
사용 가능(C의 타입을 가지는 느낌으로 구별가능)
'Java > Java(base)' 카테고리의 다른 글
[Java] 예외처리 try-catch-finally / throw throws 차이점 및 예제 (0) | 2021.12.01 |
---|---|
[Java] 내부 클래스 Inner class , 익명 클래스 Anonymous Inner class (0) | 2021.12.01 |
[Java] 추상클래스 abstract class, final (0) | 2021.12.01 |
[Java]접근 권한 제어자 public, private, protected, default / getter, setter (0) | 2021.11.30 |
[Java] Upcasting(업캐스팅), Downcasting(다운캐스팅), instanceof (0) | 2021.11.30 |