zoukankan      html  css  js  c++  java
  • scala中Trait简单使用

    trait Log {
    
      def log(message:String) = println("log:" + message)
    
    }
    
    
    /**
      * 为实例混入trait
      *
      */
    
    trait Logs{
      def log(message:String){}
    }
    
    trait MyLog extends Logs {
      override def log(message: String): Unit = {
        println("log:" + message)
      }
    }
    
    class MixTraitUse(val name:String) extends Logs {
    
      def sayHello{
        println("hello " + name)
        log("sayHello method invoked!!")
      }
    
    }
    
    
    object MixTraitUseTest{
    
      def main(args: Array[String]): Unit = {
        val mix1 = new MixTraitUse("yxj")
        mix1.sayHello
    
        val mix2 = new MixTraitUse("yyy") with MyLog
        mix2.sayHello
      }
    

      

    trait Handler {
    
      def handler(data: String) {}
    
    }
    
    trait DataValidTrait extends Handler {
    
      override def handler(data: String): Unit = {
        println("this is DataValidTrait handler invoked.")
        super.handler(data)
      }
    
    }
    
    trait SignatureTrait extends Handler {
    
      override def handler(data: String): Unit = {
        println("this is SignatureTrait handler invoked.")
        super.handler(data)
      }
    
    }
    
    class ChainPerson(name: String) extends SignatureTrait with DataValidTrait {
    
      def sayHello(data: String) {
        println("sayHello from " + name)
        handler(data)
      }
    }
    
    object TraitChainUse {
    
      def main(args: Array[String]): Unit = {
        val p1 = new ChainPerson("yxj")
        p1.sayHello("chanin data")
    
    
      }
    
    }
    

      

    trait Loger {
      println("loger constructor ..")
    }
    
    trait MyLoger extends Loger{
      println("MyLoger constructor...")
    }
    
    trait TimeLoger extends Loger{
      println("TimeLogers constructor...")
    }
    
    class TraitConstructor {
        println("trait constructor")
    }
    
    class SubTrait extends TraitConstructor with MyLog with TimeLoger {
    
      println("subtrait contructor...")
    
    }
    
    object tcT{
    
      def main(args: Array[String]): Unit = {
        val sub = new SubTrait
    
      }
    }
    

      

    class People(val name:String) extends Log {
    
    
      def makeFriends(p:People) ={
        println("hello, " + p.name + " i'm " + name + ",i want to make friends with you ")
        log("makeFriends method invoked with parameter " + p.name)
      }
    
    }
    
    
    object TraitLoggerUse{
    
      def main(args: Array[String]): Unit = {
        val s1 = new People("yxj")
        val s2 = new People("wulanlan")
    
        s1.makeFriends(s2)
    
      }
    
    
    }
    

      

    trait HelloTrait{
      def sayHello(name:String)
    }
    
    /**
      * trait 中定义的field,继承的类,可以直接获取到使用
      *
      */
    trait MakeTrait{
      val eyeNum:Int = 2
      def makeFriends(p:Person)
    }
    
    class Person(val name:String) extends HelloTrait with MakeTrait {
    
      def sayHello(otherName:String) = {
          println("hello " +otherName + ", im " + name + ", i have " + eyeNum + " eyes.")
      }
    
      def makeFriends(p: Person): Unit = {
        println("hello " + p.name + ",i'm " + name + ",i want to make friends with you.")
      }
    
    }
    
    object useTrait{
    
      def main(args: Array[String]): Unit = {
    
        val p1 = new Person("yxj")
        val p2 = new Person("wulanlan")
    
        p1.sayHello("yy")
    
        p2.sayHello("zz")
    
        p1.makeFriends(p2)
    
      }
    
    }
    

      

  • 相关阅读:
    Linux磁盘分区MBR分区
    win10 1809磁盘占用总是100%
    LINUX系统的7种运行级别
    【工作环境】公司主域控硬盘损坏后的维修步骤
    程序员的一些人生感悟
    dispatch_get_main_queue 的同步异步问题
    虚拟机VirtualBox中Ubuntu无法全屏解决方法
    十大报错、报异常、跑不起来原因
    关于scrollbarfacecolor只支持ie的解决方法
    一个严肃的面试经验
  • 原文地址:https://www.cnblogs.com/yxj0728/p/9281820.html
Copyright © 2011-2022 走看看