인터페이스는 쉽게말해서 프로그램에서 변경될 부분, 구현 세부사항에 대한 의존성을 줄이는 역할을 수행하는 추상 메서드만을 가진 타입. 더 넓게 보면 객체는 캡슐화와 은닉화를 통해서 그 동작이 외부에 잘 드러나지 않는데, 이러한 객체와의 메세지를 교환하기 위한 공통된 방법을 정의하는 것. 이쪽은 trait도 포함하는 개념.
개념적으로는 이렇고 interface A가 있을 때 B와 C라는 객체가 A를 구현하고 있을 때 다음과 같이 쓸 수 있음. 이 때 A.print는 B와 C에서 클래스명을 출력한다고 했을 때
List<A> list = new ();
list.add(new B());
list.add(new C());
foreach (var a in list) {
a.print();
}
이를 다형성이라고 하지만 인터페이스만의 특징은 아님.