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!")
  }
}
相关推荐
爱吃山竹的大肚肚2 小时前
EasyPOI 大数据导出
java·linux·windows
aini_lovee2 小时前
寻找 MAC 协议的 MATLAB 仿真
开发语言·macos·matlab
panzer_maus3 小时前
归并排序的简单介绍
java·数据结构·算法
Smartdaili China3 小时前
掌握Java网页抓取:技术与示例完整指南
java·网络·学习·指南·网页·住宅ip·爬虫api
Jelena157795857923 小时前
Java爬虫淘宝拍立淘item_search_img拍接口示例代码
开发语言·python
郝学胜-神的一滴3 小时前
Python数据模型:深入解析及其对Python生态的影响
开发语言·网络·python·程序人生·性能优化
一水鉴天3 小时前
整体设计 定稿 之26 重构和改造现有程序结构 之2 (codebuddy)
开发语言·人工智能·重构·架构
程序员游老板3 小时前
基于SpringBoot3_vue3_MybatisPlus_Mysql_Maven的社区养老系统/养老院管理系统
java·spring boot·mysql·毕业设计·软件工程·信息与通信·毕设
star _chen4 小时前
C++ std::move()详解:从小白到高手
开发语言·c++