Object
을 제외한 Java의 모든 reference type은 하나의 단일 수퍼 클래스에서 파생됩니다.
그런데 Java 클래스는 0 개 이상의 인터페이스를 구현할 수 있습니다.
일반적으로 인터페이스는 구현 클래스를 강제로 구현하는 방법을 설명하는 계약이지만 구현을 직접 제공하지는 않습니다.
즉, Java 클래스는 계약을 준수하여 구현하도록 선언 된 인터페이스가 제공하는 메소드 서명에 구현을 제공해야합니다.
인터페이스는 유형을 구성합니다. 따라서 매개 변수를 전달하고 인터페이스 유형으로 선언 된 메소드에서 리턴 값을 가질 수 있으므로 매개 변수와 리턴 유형이 반드시 특정 구현을 제공하지 않고 특정 메소드를 구현하는 방식이 필요합니다.
예를 들어 dependency injection과 같은 여러 추상화 패턴의 기초를 설정합니다.
스칼라에는 자체 특성이 있습니다. 특성은 Java 인터페이스의 모든 기능을 제공하며 메소드 구현 및 변수를 포함 할 수 있다는 점에서 큰 차이가 있습니다. 형질은 메서드를 한 번만 구현하는 현명한 방법이며,이를 통해 형질을 확장하는 모든 클래스에 이러한 메서드를 배포합니다. Java 클래스의 인터페이스와 마찬가지로 두 개 이상의 특성을 Scala 클래스에 혼합 할 수 있습니다.
내가 더 루비 배경이 없기 때문에,하지만, 나는 데이비드 폴락의 "시작 스칼라"(amazon link)에서 발췌 한 당신을 가리킬 수 있습니다 :
루비가 될 수있는 방법의 모음이나 mixin을 가지고 어떤 수업에도 섞여있다. Ruby에는 정적 유형 지정이 없으므로 메소드 매개 변수의 유형을 선언 할 방법이 없으므로 mixins를 사용하여 인터페이스와 같은 계약을 정의하는 합리적인 방법이 없습니다. Ruby 믹스 인은 코드를 클래스로 구성하는 메커니즘을 제공하지만 매개 변수 유형을 정의하거나 강제하는 메커니즘은 제공하지 않습니다.
인터페이스는이 게시물에서 설명한 것 이상을 할 수 있습니다. 주제가 방대 할 수 있기 때문에 세 방향의 각각에 대해 더 자세히 조사 할 것을 제안합니다. Java 배경이있는 경우 스칼라와 특성이 배우기에 적당합니다.
스칼라에는 특성 만 있습니다 (믹스 인 및 인터페이스는 형질에 포함됩니다).귀하의 프로필을 보면 Java 배경이있는 것 같습니다. Scala를 사용해보아야한다. 현재 클래스와 직각 인 구현을 믹스 할 때 매우 편리하다. 형질을 쌓기를 원할 때 바로하는 것이 어렵습니다. 자세한 내용은 http://www.artima.com/pins1ed/traits.html을 참조하십시오. – huynhjl
@ams : [answer] (http://stackoverflow.com/a/23124968/33311)를보십시오. 태그가 "그루비"라고해도 유용 할 수 있습니다. – Lernkurve