• scala特质


    package com.ming.test
    
    
    /**
     * scala 特质,类似与java接口,但是比java接口强大,可以有实现方法,定义字段之类的
     */
    
    /**
     * 定义一个日志的特质
     */
    trait LoggerTrait {
      def logger(str:String):String
      def loggerDev(str:String):String={"hello"}
    }
    
    /**
     * 定义一个是否相等的特质
     */
    trait EqualTrait {
      def isEqual(x: Any): Boolean
      def isNotEqual(x: Any): Boolean = !isEqual(x)
    }
    
    /**
     * 定义一个类,继承上面两个特质
     */
    class LoggerClass(xc: Int, yc: Int) extends LoggerTrait with EqualTrait{
      var x: Int = xc
      var y: Int = yc
      def isEqual(obj: Any) =
        obj.isInstanceOf[LoggerClass] &&
        obj.asInstanceOf[LoggerClass].x == x
        
      def logger(str:String):String={str}
    }
    
    /**
     * 定义一个空类,打算在使用的时候去实现特质
     */
    class KongClass{
      
    }
    
    object TraitTest{
      def main(args: Array[String]): Unit = {
        
        var a=new LoggerClass(5,6);
        var b=new LoggerClass(5,6);
        var c=new LoggerClass(5,7);
        println(a.isEqual(b));
        println(a.isEqual(c));
        println(a.isNotEqual(c));
        println(a.loggerDev(""));
        
        //空类使用继承不同的特质,类似与java实现接口哦
        var kong1=new KongClass with LoggerTrait{
           def logger(str:String):String={str}
        }
        val str=kong1.logger("kong1")
        println(str)
        
      }
    }
    特质构造顺序
    特质也可以有构造器,由字段的初始化和其他特征体中的语句构成。这些语句在任何混入该特质的对象在构造是都会被执行。
    构造器的执行顺序:
    调用超类的构造器;
    特质构造器在超类构造器之后、类构造器之前执行;
    特质由左到右被构造;
    每个特质当中,父特质先被构造;
    如果多个特质共有一个父特质,父特质不会被重复构造
    所有特质被构造完毕,子类被构造。
  • 相关阅读:
    删除表
    删除表格的行或者列
    给word中的表格增加行或者列
    向word中插入表格
    设置图片的对齐方式
    day19作业
    Python入门day19——叠加多个装饰器、yield、三元表达式、生成式、函数的递归调用
    day18作业
    Python入门day18——有参装饰器
    Python入门day18——迭代器生成器
  • 原文地址:https://www.cnblogs.com/huzi007/p/6118126.html
Copyright © 2020-2023  润新知