인터페이스의 몇가지 규칙을 더 알아보자.
- 하나의 클래스가 여러개의 인터페이스를 구현 할 수 있다.
클래스 A는 메소드 x나 z 중 하나라도 구현하지 않으면 오류가 발생한다.
package org.opentutorials.javatutorials.interfaces.example3; interface I1{ public void x(); } interface I2{ public void z(); } class A implements I1, I2{ public void x(){} public void z(){} }
package org.opentutorials.javatutorials.interfaces.example3; interface I3{ public void x(); } interface I4 extends I3{ public void z(); } class B implements I4{ public void x(){} public void z(){} }
아래 코드는 오류를 발생한다. 인터페이스는 그 인터페이스를 구현한 클래스를 어떻게 조작할 것인가를 규정한다. 그렇기 때문에 외부에서 제어 할 수 있는 가장 개방적인 접근 제어자인 public만을 허용한다. public을 생략하면 접근 제어자 default가 되는 것이 아니라 public이 된다. 왜냐하면 인터페이스의 맴버는 무조건 public이기 때문이다.
package org.opentutorials.javatutorials.interfaces.example3; interface I5{ private void x(); }
인터페이스와 추상 클래스는 서로 비슷한 듯 다른 기능이다. 인터페이스는 클래스가 아닌 인터페이스라는 고유한 형태를 가지고 있는 반면 추상 클래스는 일반적인 클래스다. 또 인터페이스는 구체적인 로직이나 상태를 가지고 있을 수 없고, 추상 클래스는 구체적인 로직이나 상태를 가지고 있을 수 있다.