[JAVA] 인터페이스(interface)

JAVA 인터페이스(interface)

약속되어있는 선언부의 형식을 그대로 상속받아 메서드들을 반드시 구현하도록 강제한다.

선언시 interface키워드를 사용한다.

인터페이스도 일종의 추상클래스이다. 오직 추상메서드와 상수만을 구성원으로 가질 수 있다.


모든 멤머변수는 public static final이어야 하며 이를 생략할 수 있다.


모든 메서드는 public abstract이어야 하며 이를 생략할 수 있다.



인터페이스는 public으로 정의해야하며 멤버도 반드시 public이다.


*** 인터페이스에 선언된 모든 메소드는 public이다 

     인터페이스에 선언된 모든 변수는 public이다(상수 final) 



=> 변수 (추상클래스:멤버변수 , 인터페이스 : 상수형변수)


인터페이스 내부에 상수용 변수 선언이 가능하다. 그리고 그변수는 그냥 작성하여도  static final로 

자동선언된다.




상속 (인터페이스는 인터페이스로부터만 상속받을 수 있다.)


인터페이스 ==> 인터페이스 

                (extends) 


인터페이스 ==> 클래스 

                (implements)


클래스 ==> 인터페이스 

                (error)


인터페이스는 클래스를 상속받을 수 없다.


인터페이스를 최종적으로 구현하는것은 마지막으로 상속받는 class 내부에서 구현해야한다.



여러개 클래스를 묶어서 인터페이스로 관리(서로 다른 클래스들에게 관계를 맺어준다)


추상클래스의 일종(추상클래스 단점을 보완)


미완성된 클래스이므로  자신이 메모리 할당을 할 수 없다 (구현한 클래스를 통해서 메모리 할당가능)



추상 메서드는 abstract로만 선언가능 (자바 8에서는 default키워드를 이용해서 일반 메소드 구현이 가능해졌다.)




================================

interface A

interface B

class C implements A,B ==> 다중상속 

           

=================================



추상클래스와 인터페이스 공통점과 차이점


공통점

1. 추상클래스와 인터페이스는 독자적으로 인스턴스화 하는 것은 불가능하며 상속을 통해서만 가능하다.

2. 구현부가 있는 메소드와 없는 메소드 모두 가질 수 있다는 점


차이점

1.인터페이스에서 모든 변수는 기본적으로 public static final 이며, 모든 메소드는 public abstract인 반면에 추상클래스에서는 static이나 final이 아닌 필드를 지정할 수 있고 public, protected, private 메소드를 가질 수 있다.


2. 인터페이스를 구현하는 어떤 클래스는 다른 여러개의 인터페이스들을 다중상속받아 구현할 수 있다. 반면에 추상클래스는 상속을 통해 구현되지만 자바에서 다중상속을 지원하지 않으므로 추상클래스를 상속받은 서브클래스는 추가적인 상속을 받을 수 없다.




댓글