스칼라 특성(기능)


Scala Trait(기능)은 Java의 인터페이스와 동일하며 실제로는 인터페이스보다 더 강력합니다.

인터페이스와 달리 속성 및 메서드 구현을 정의할 수도 있습니다.

일반적으로 Scala 클래스는 단일 상위 클래스만 상속할 수 있지만 Trait(기능)인 경우 여러 항목을 상속할 수 있으며 그 결과 다중 상속이 이루어집니다.

Trait(특성)는 클래스와 비슷한 방식으로 정의되지만, 사용하는 키워드는 trait입니다. 아래와 같이

trait Equal {
  def isEqual(x: Any): Boolean
  def isNotEqual(x: Any): Boolean = !isEqual(x)
}

위의 Trait(특성) )은 2개로 구성됩니다. isEqual, isNotEqual 2가지 메소드로 구성됩니다. isEqual 메소드는 메소드의 구현을 정의하지 않으며 isNotEqual은 메소드의 구현을 정의합니다. 서브클래스는 구현되지 않은 메서드를 구현하기 위해 특성을 상속합니다. 그래서 사실 Scala Trait(기능)은 Java의 추상 클래스에 가깝습니다.

다음은 기능의 전체 예를 보여줍니다.

/* 文件名:Test.scala
 * author:php中文网
 * url:www.php.cn
 */
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

기능 구성 순서

특징 또한 특성 본문에 필드 및 기타 명령문의 초기화로 구성된 생성자가 있을 수 있습니다. 이 명령문은 이 특성과 혼합된 개체를 생성하는 동안 실행됩니다.

생성자의 실행 순서:

  • 슈퍼 클래스의 생성자를 호출합니다.

  • 특성 생성자는 슈퍼 클래스는 생성자 뒤, 클래스 생성자 전에 실행됩니다.

  • 특성은 왼쪽에서 오른쪽으로 구성됩니다. 상위 특성이 먼저 구성됩니다.

  • 여러 특성이 상위 특성을 공유하는 경우 상위 특성이 반복적으로 구성되지 않습니다.

  • 모든 특성이 구성됩니다. , 서브클래스가 생성됩니다.

  • 생성자의 순서는 클래스 선형화의 반대입니다. 선형화는 유형의 모든 상위 유형을 설명하는 기술 사양입니다.