Scalaのトレイト(特性)

形質(形質)
scala中没有Java中的接口(interface),替代的概念是——特质
定義された
特性は、コード再利用のScalaの基本単位である
メソッドとフィールドは、カプセル化され、その後クラスに追加することができ
、同じクラス継承されていない、スーパークラスの各クラス継承要件が継承することができますクラスが、クラスは、資質の任意の数を追加することができます。
定義や抽象クラスの定義のような特性が、それが使用された形質キーワード
構文
定義された文字の
形質名{
//フィールド抽象
//抽象メソッド
}
コピー

継承特性
クラスクラス2 {で形質形質1を拡張
における//フィールド
の//実行される方法
}
コピー
(スカラかクラス特性は、キーワード延び使用している)の使用は、継承された形質に延び
用い、複数の形質を継承しますキーを持つ
形質は、インターフェイスを使用した
trait作为接口使用,与java的接口使用方法一样。
例|継承された単一形質
の例が示す
ロガー形質を作成し、ログ抽象メソッドは、Stringパラメータを受け入れる追加
ConsoleLoggerクラスを作成するには、Loggerは、ログを達成するための方法を形質を継承し、印刷メッセージは
mainメソッドを追加し、作成ConsoleLoggerオブジェクトメソッド呼び出しログ
参照コード

  trait Logger {
    // 抽象方法
    def log(message:String)
  }
class ConsoleLogger extends Logger {
    override def log(message: String): Unit = println("控制台日志:" + message)
  }
 def main(args: Array[String]): Unit = {
    val logger = new ConsoleLogger
    logger.log("这是一条日志")
  }

ここに画像を挿入説明
結果:

ここに画像を挿入説明
例|継承つ以上の形質
の例が示す
するmessageSender品質を作成し、sendメソッドを追加する
方法受け取る追加、MessageReceiver品質を作成し
、これらの2つの性質を達成MessageWorkerを作成するために
、それぞれの方法の受信、メインにと呼ばれるが、sendメソッドを呼び出して
参照コードを:

trait MessageSender {
    def send(msg:String)
}
trait MessageReceive {
    def receive():String
}
class MessageWorker extends MessageSender with MessageReceive {
    override def send(msg: String): Unit = println(s"发送消息:${msg}")
 override def receive(): String = "你好!我叫一个好人!"
}
def main(args: Array[String]): Unit = {
    val worker = new MessageWorker
    worker.send("hello")
    println(worker.receive())
}

ここに画像を挿入説明
結果:
ここに画像を挿入説明
実施例|オブジェクト継承形質の
例は示している
、ロガー形質を作成するログ抽象メソッドを追加
ConsoleLoggerにオブジェクトを作成するために、LoggerForObject特性を達成するために、ログを達成するための方法、メッセージ印刷
メインメソッドで記述されたが、ログメソッドConsoleLoggerを呼び出す
参照コード:

trait Logger {
    def log(message:String)
}

object ConsoleLogger extends Logger {
    override def log(message: String): Unit = println("控制台消息:" + message)
}

def main(args: Array[String]): Unit = {
    ConsoleLogger.log("程序退出!")
}

ここに画像を挿入説明
結果:
ここに画像を挿入説明

公開された139元の記事 ウォンの賞賛333 ビュー210 000 +

おすすめ

転載: blog.csdn.net/qq_45765882/article/details/104303366