Scala Trait(機能)
Scala Trait (機能) は Java のインターフェースに相当し、実際にはインターフェースよりも強力です。
インターフェイスとは異なり、プロパティとメソッドの実装を定義することもできます。
通常、Scalaのクラスは親クラスを1つしか継承できませんが、Trait(feature)であれば複数の継承が可能であり、結果として多重継承が実現されます。
Trait (特性) はクラスと同様の方法で定義されますが、以下に示すようにキーワード trait を使用します。
trait Equal { def isEqual(x: Any): Boolean def isNotEqual(x: Any): Boolean = !isEqual(x) }
上記の Trait (特性) は 2 つのメソッドで構成されます: isEqual と isNotEqual 。 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
機能構築順序
機能には、フィールドとステートメントの初期化で構成されるコンストラクターも含めることができます。他のフィーチャーボディ。これらのステートメントは、この特性が混合されたオブジェクトの構築中に実行されます。
コンストラクターの実行順序:
スーパークラスのコンストラクターを呼び出します。
特性コンストラクターは、スーパークラスのコンストラクターの後、クラスのコンストラクターの前に実行されます。
トレイトは左から右に構築されます。
- 各機能について、最初に親特性が構築されます。
- 複数の機能が親特性を共有する場合、親特性は繰り返し構築されません
- すべての機能が構築された後、サブクラスが構築されます。