인터페이스 정의
[public] interface iname [extends i2name]
- public을 포함할수 있지만 생략
- abstract를 포함할수 있지만 생략
- 필드에 static과 final을 포함할수 있지만 생략
- 모든 인터페이스는 public과 abstract이다.
- 정의할수 있는 인터페이스의 속성은 static과 final
인터페이스 키워드 implements
[public] [qualefiers] class classname implements iname ( , i2name, ...)
- 클래스는 여러개의 인터페이스를 구현할 수 있다.
- 클래스는 avstract 또는 final일 수 있다.
- 클래스는 한개의 클래스 확장과 여러 개의 인터페이스를 구현할수 있다.
인터페이스와 추상 클래스
- 해당 기능이 객체에 매우 잘 결합되어 있을때는 추상 메서드
- 해당 기능이 객체에 보조적인 경우 인터페이스
- 해당 기능이 다른 객체에 광범위하게 적용가능하면 인터페이스
매개변수를 통해 동적으로 제공
class A {
void autoPlay(I i) {
i.play();
}
}
interface I {
public abstract void play();
}
class B implements I {
public void play() {
System.out.println("play in B class");
}
}
class C implements I {
public void play() {
System.out.println("play in C class");
}
}
public class InterfaceTest {
public static void main(String[] args) {
A a = new A();
a.autoPlay(new B());
a.autoPlay(new C());
}
}
제 3의 클래스를 통해 제공
public class InterfaceTest {
public static void main(String[] args) {
A a = new A();
a.methodA();
}
}
class A {
void methodA() {
I i = InstanceManager.getInstance(); //제 3의 클래스 메서드를 통해 인터페이스 I를
i.methodB(); // 구현한 클래스의 인스턴스를 얻어온다.
}
}
interface I {
public abstract void methodB();
}
class B implements I {
public void methodB() {
System.out.println("methodB in B class");
}
}
class InstanceManager {
public static I getInstance() {
return new B();
}
}