1. 인터페이스의 특징
- 다중 상속이 가능하게 해준다.
- 추상 메소드와 상수만 선언 가능하다
- 생성자 사용이 불가능하다(객체가 아니기 때문)
- 메서드 오버라이딩이 필수이다.(오버라이딩을 안할 경우 컴파일 단계에서 에러가 발생한다.)
2. 인터페이스 사용하는 이유?
- 자바에서 다중 상속을 가능하게 해준다. 자바는 class를 다중으로 상속하는 것은 불가능하다. diamond problem를 해결하기 위해 자바는 단일 상속만을 원칙으로 한다.
mother과 father을 상속받은 child 입장에서 love()를 실행할 경우 어떤 함수를 실행 시켜야할지 모호함이 발생.
- 코드의 종속성을 낮춰준다.
- 공통으로 필요한 특정 메소드를 인터페이스로 적용한다면, 각각의 메소드를 자유롭게 변경할 수 있다.
3. 인터페이스 예시
- 인터페이스 상속시 "implements" 명령어를 사용
- Mother.java
package org.example;
public interface Mother {
public abstract void love();
}
package org.example;
public interface Father {
public abstract void love();
}
package org.example;
public class Child implements Mother, Father{
@Override
public void love() {
System.out.println("i love you");
}
}
package org.example;
public class Main {
public static void main(String[] args) {
Child child = new Child();
child.love();
}
}