스칼라 형질 (기능)
스칼라 형질 (특성) 등가 자바 인터페이스 사실, 또한 인터페이스보다 강력하다.
인터페이스는 다른, 그것은 속성과 메서드의 정의를 얻을 수 있습니다.
정상적인 상황에서는 스칼라 클래스는 하나의 부모를 상속하지만, 형질 (기능), 다음의 결과로부터, 다중 상속 할 수있는 경우 다중 상속을 구현하는 것입니다 수 있습니다.
형질 정보 (기능) 클래스의 정의와 유사하지만, 다음과 같이 그키워드의 특성을 사용
trait Equal { def isEqual(x: Any): Boolean def isNotEqual(x: Any): Boolean = !isEqual(x) }
ISEQUAL 및isNotEqual :두 가지방법에의해 구성 형질 (특성)위.ISEQUAL 방법은 구현 정의 방법이 아니다, 그것의 방법을 정의 isNotEqual. 서브 클래스는 상속 기능이 구현 될 수있는 방법은 구현되지 않습니다. 자바 추상 클래스와 같은 사실 스칼라 형질 (기능)에 따라서.
다음의 예는 완전한 기능을 보여 :
/* 文件名:Test.scala * author:本教程 * url:www.w3big.com */ trait Equal { def isEqual(x: Any): Boolean def isNotEqual(x: Any): Boolean = !isEqual(x) } class Point(xc: Int, yc: Int) extends Equal { var x: Int = xc var y: Int = yc def isEqual(obj: Any) = obj.isInstanceOf[Point] && obj.asInstanceOf[Point].x == x } object Test { def main(args: Array[String]) { val p1 = new Point(2, 3) val p2 = new Point(2, 4) val p3 = new Point(3, 3) println(p1.isNotEqual(p2)) println(p1.isNotEqual(p3)) println(p1.isNotEqual(2)) } }
위의 코드의 구현, 출력은 :
$ scalac Test.scala $ scala Test false true true
건설 오더 특성
기능은 또한 생성자를 포함 할 수 있으며, 초기화 필드의 구문에 의해 신체의 다른 기능 구성. 특징 구조에 혼합 물체에서이 문이 실행됩니다.
생성자의 실행 순서 :
- 슈퍼 클래스의 생성자를 호출;
- 클래스 생성자 실행하기 전에 슈퍼 클래스 생성자 후 특성화 생성자;
- 특성은 왼쪽에서 오른쪽으로 구성되어 있습니다;
- 부모 특성 중 각 기능은 처음 건설되었다;
- 여러 기능 상위 특성 상위 특성은 반복하지 않는다 구조가 있다면
- 모든 기능은 완성 된 서브 클래스가 구성되어 구성됩니다.
생성자 역 클래스의 선형 순서입니다. 선형화 슈퍼 종류 기술 사양 모든 종류의 형태를 설명한다.