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!")
  }
}
相关推荐
胚芽鞘6814 小时前
关于java项目中maven的理解
java·数据库·maven
nbsaas-boot5 小时前
Java 正则表达式白皮书:语法详解、工程实践与常用表达式库
开发语言·python·mysql
岁忧5 小时前
(LeetCode 面试经典 150 题 ) 11. 盛最多水的容器 (贪心+双指针)
java·c++·算法·leetcode·面试·go
chao_7895 小时前
二分查找篇——搜索旋转排序数组【LeetCode】两次二分查找
开发语言·数据结构·python·算法·leetcode
CJi0NG5 小时前
【自用】JavaSE--算法、正则表达式、异常
java
风无雨5 小时前
GO 启动 简单服务
开发语言·后端·golang
Hellyc5 小时前
用户查询优惠券之缓存击穿
java·redis·缓存
斯普信专业组5 小时前
Go语言包管理完全指南:从基础到最佳实践
开发语言·后端·golang
今天又在摸鱼6 小时前
Maven
java·maven
老马啸西风6 小时前
maven 发布到中央仓库常用脚本-02
java·maven