zoukankan      html  css  js  c++  java
  • Scala Trait(特征)

    Scala Trait(特征)相当于Java接口,实际上它比接口功能还要强大。
    与Java的接口不同的是Scala Trait可以设置属性和方法的实现。
    一般情况下,Scala的类只能实现单继承,但是Scala Trait可以多个继承。这样就实现了多重继承。

    package Test
    
    /*
    *特征说明:Equal
    * 方法:
    *   isEqual-对象的属性是否相同。
    *   isNotEqual-与isEqual函数相反的函数
     */
    trait Equal{
      def isEqual(x:Any):Boolean;
      def isNotEqual(x:Any):Boolean = !isEqual(x);
    }
    
    /*
    * 类说明:点类, 该类继承了Equal这个trait,就具有了判断相同的方法。
    * 属性:
    *   (x, y)点的坐标
    * 方法:
    *   isEqual-判断是否都是点对象,如果都是点则判断x是否相同。实现Tarit的抽象方法。
     */
    class Point (xc:Int, yc:Int) extends Equal{
      var x:Int =xc;
      var y:Int=yc;
      def isEqual(obj:Any): Boolean={
        return obj.isInstanceOf[Point]&&obj.asInstanceOf[Point].x==x;
      }
    }
    
    object Test{
      def main(args: Array[String]): Unit = {
        val p1=new Point(2,3);
        val p2=new Point(2,4);
        val p3=new Point(3,3);
        val p4=4;
    
        println("p1和p2:"+p1.isNotEqual(p2));
        println("p1和p3:"+p1.isNotEqual(p3));
        println("p1和p4:"+p1.isNotEqual(p4));
      }
    }
    

    特征构造顺序

    特征也可以有构造器,由字段的初始化和其他特征体重的语句构成。这些语句在任何混入该特征的对象在构造时都会执行。
    构造器的执行过程:

    • 调用超类的构造器
    • 特征构造器在超类构造之后,类构造器之前执行。
    • 特征由左到右被构造
    • 每个特征当中,父特征先被构造
    • 如果多个特征共有一个父特征,父特征不会被重复构造。
    • 所有特征被构造完毕,子类被构造。

    构造器的顺序是类的线性化的反向。线性化是描述某个类型的所有超类型的一种技术规格。

  • 相关阅读:
    uva 10369 Arctic Network
    uvalive 5834 Genghis Khan The Conqueror
    uvalive 4848 Tour Belt
    uvalive 4960 Sensor Network
    codeforces 798c Mike And Gcd Problem
    codeforces 796c Bank Hacking
    codeforces 768c Jon Snow And His Favourite Number
    hdu 1114 Piggy-Bank
    poj 1276 Cash Machine
    bzoj 2423 最长公共子序列
  • 原文地址:https://www.cnblogs.com/ALINGMAOMAO/p/14421969.html
Copyright © 2011-2022 走看看