Scala 特质(Traits)与类继承 #scala #Scala #Scala继承

1.Scala 特质(Traits)与类继承

在Scala中,特质(Traits)是一种可以被混入(mixin)到类中的代码片段,类似于Java中的接口,但更加灵活。特质可以包含字段声明、方法声明和方法实现。特质可以被多个类混入,实现代码的复用。

Scala 复制代码
// 定义特质A051,包含打印语句
trait A051 {
  println("A051")
}

// 定义特质AA051,它继承自A051
trait AA051 extends A051 {
  println("AA051") // 打印AA051
}

// 定义特质AB051,它也继承自A051
trait AB051 extends A051 {
  println("AB051") // 打印AB051
}

// 定义特质B051,包含打印语句
trait B051 {
  println("B051")
}

// 定义特质BA051,它继承自B051
trait BA051 extends B051 {
  println("BA051") // 打印BA051
}

// 定义特质BB051,它也继承自B051
trait BB051 extends B051 {
  println("BB051") // 打印BB051
}

2. Scala 类与特质混入

Scala中的类可以混入多个特质,这允许类继承多个特性。当一个类混入多个特质时,如果这些特质中有相同的方法,那么类必须覆盖这些方法以解决冲突。

Scala 复制代码
// 定义类AB,它混入了四个特质:AA051、BA051、AB051和BB051
class AB extends AA051 with BA051 with AB051 with BB051 {
  println("AB") // 打印AB
}

3.Scala 对象与主程序入口

在Scala中,对象(Object)是一种单例类,它不能被继承。对象通常用作程序的入口点。

Scala 复制代码
// 定义对象Test21_01,包含主程序入口main方法
object Test21_01 {
  // main方法,程序的入口点
  def main(args: Array[String]): Unit = {
    new AB() // 创建AB类的实例,触发特质和类的打印语句
  }
}

这段代码展示了Scala中特质的继承和混入,以及如何使用对象作为程序的入口点。当你运行Test21_01对象的main方法时,会创建AB类的实例,这将触发所有混入特质和类中的打印语句,按照它们在类定义中的顺序执行。

4.空指针异常

Scala 复制代码
import java.io.PrintWriter
// 演示一个经典的错误:空指针异常


trait FilerLogger{
  // 抽象属性,没有 =
  val filename :String
  println("父类",filename)

  // lazy 表示,不立刻求值,而是等到这个变量被使用的时候,去求值
  lazy val fileout = new PrintWriter(filename)

  // 用来 把msg 写入到对应的文件中
  def log (msg:String):Unit={
    fileout.println(msg)
    fileout.flush()
  }
}
class Test211 extends  FilerLogger{
  val filename = "2024-10-28.txt"
  println("子类",filename)
}



object Test21_02 {
  def main(args: Array[String]): Unit = {
    val t1 =new Test211()
    t1.log("test!")
  }
}
相关推荐
疯狂的喵4 小时前
C++编译期多态实现
开发语言·c++·算法
2301_765703144 小时前
C++中的协程编程
开发语言·c++·算法
m0_748708054 小时前
实时数据压缩库
开发语言·c++·算法
lly2024065 小时前
jQuery Mobile 表格
开发语言
惊讶的猫5 小时前
探究StringBuilder和StringBuffer的线程安全问题
java·开发语言
jmxwzy5 小时前
Spring全家桶
java·spring·rpc
Halo_tjn5 小时前
基于封装的专项 知识点
java·前端·python·算法
m0_748233176 小时前
30秒掌握C++核心精髓
开发语言·c++
Fleshy数模6 小时前
从数据获取到突破限制:Python爬虫进阶实战全攻略
java·开发语言
Duang007_6 小时前
【LeetCodeHot100 超详细Agent启发版本】字母异位词分组 (Group Anagrams)
开发语言·javascript·人工智能·python