Scala - 特性(Traits)

Scala - 特性(Traits) 首页 / Scala入门教程 / Scala - 特性(Traits)

Traits封装了方法和字段定义,然后可以通过混合到类中来重用它们。与类继承不同,一个类可以混合任意数量的traits。

traits定义看起来类似于类定义,只是它使用关键字 trait 。以下是trait的基本示例语法。

Traits - 语法

trait Equal {
   def isEqual(x: Any): Boolean
   def isNotEqual(x: Any): Boolean=!isEqual(x)
}

此traits包含两个方法 isEqual 和 isNotEqual 。在这里,我们没有给出isEqual的任何实现,而另一种方法已经实现了。子类可以为未实现的方法提供实现。因此, traits与Java中的抽象类非常相似。

在这里,需要知道两种重要的Scala方法,在以下示例中将使用它们。

  • obj.isInstanceOf [Point]  要检查obj和Point的类型是否相同。

  • obj.asInstanceOf [Point] 表示通过采用对象obj类型进行精确转换,并返回与Point类型相同的obj。

Traits - 示例

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 == y
}

object Demo {
   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))
   }
}

将上述程序保存在 Demo.scala 中。以下命令用于编译和执行该程序。

\>scalac Demo.scala
\>scala Demo
true
false
true

Traits - 值类

Value classes是Scala中避免分配运行时对象的新机制,它包含一个仅带有一个 val 参数的主构造函数,它仅包含不允许使用var,val,嵌套类(nested classes), traits或Object的方法(def),值类不能由其他类扩展,这可以通过使用AnyVal扩展值类来实现。

Traits - 值类示例

trait Printable extends Any {
   def print(): Unit=println(this)
}
class Wrapper(val underlying: Int) extends AnyVal with Printable

object Demo {
   def main(args: Array[String]) {
      val w=new Wrapper(3)
      w.print() //实际上需要实例化一个 Wrapper 实例
   }
}

将上述程序保存在 Demo.scala 中。以下命令用于编译和执行该程序。

\>scalac Demo.scala
\>scala Demo

它将为您提供Wrapper类的hashCode。

Wrapper@13

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

朱赟的技术管理课 -〔朱赟〕

代码精进之路 -〔范学雷〕

TensorFlow快速入门与实战 -〔彭靖田〕

Java并发编程实战 -〔王宝令〕

全栈工程师修炼指南 -〔熊燚(四火)〕

Tony Bai · Go语言第一课 -〔Tony Bai〕

B端体验设计入门课 -〔林远宏(汤圆)〕

深入拆解消息队列47讲 -〔许文强〕

手把手带你写一个 MiniTomcat -〔郭屹〕

好记忆不如烂笔头。留下您的足迹吧 :)