scala类与集合

一、抽象类

1.抽象属性和抽象方法

使用 abstract 关键字声明抽象类

包含抽象属性(未初始化)和抽象方法(只声明没有实现)

(1)定义抽象类:abstract class Person{} //通过 abstract 关键字标记抽象类

(2)定义抽象属性:val|var name:String //一个属性没有初始化,就是抽象属性

(3)定义抽象方法:def hello():String //只声明而没有实现的方法,就是抽象方法

2.继承与重写

子类需实现所有抽象成员,否则子类也需声明为抽象类

重写非抽象方法需用 override,抽象方法可省略

父类非抽象属性若为 val,子类可用 override val 重写;若为 var,子类不可重写

二、匿名子类

和 Java 一样,可以通过包含带有定义或重写的代码块的方式创建一个匿名的子类

三、单例对象(伴生对象)

1.使用 object 声明单例对象,与类名一致时称为伴生对象

单例对象中的属性和方法都可以通过伴生对象名(类名)直接调用访问

2.apply方法

支持不使用 new 创建对象,实现构造函数私有化[在()之前加上 private]

可以重载

四、特质(Trait)

1.特质声明

使用 trait 定义,可包含抽象和具体方法,一个类可以混入多个特质

2.特质基本语法

类和特质的关系:使用继承的关系,一个类可以混入多个特质

无父类时:class 类名 extends 特质1 with 特质2

有父类时:class 类名 extends 父类 with 特质1 with 特质2

动态混入:创建对象时临时混入特质

3.特质叠加

解决方法冲突时,Scala 按叠加顺序解析 super

顺序规则:子类 → 混入的第一个特质 → 第二个特质 → ... → 父类

4.特质自身类型

自身类型可实现依赖注入的功能

5.特质和抽象类的区别

特质可多混入,抽象类只能单继承

抽象类可定义带参构造函数,特质只能无参

五、扩展

1.obj.isInstanceOf[T]:判断 obj 是不是T 类型

obj.asInstanceOf[T]:将 obj 强转成 T 类型

classOf 获取对象的类名

2.枚举类和应用类

枚举类:需要继承 Enumeration

应用类:需要继承App

3.Type 定义新类型

使用 type 关键字可以定义新的数据数据类型名称,本质上就是类型的一个别名

六、集合

1.简介

分类

不可变集合(scala.collection.immutable):集合对象不可修改,每次修改就会返回一个新对象, 而不会对原对象进行修改

可变集合(scala.collection.mutable):直接修改原对象

2.数组

不可变数组:val arr1 = new Array[Int](10)

(1)new 是关键字

(2)[Int]是指定可以存放的数据类型,如果希望存放任意数据类型,则指定Any

(3)(10),表示数组的大小,确定后就不可以变化

可变数组:

定义变长数组

val arr01 = ArrayBuffer[Any](3, 2, 5)

Any\]存放任意数据类型 (3, 2, 5)初始化好的三个元素 ArrayBuffer(有序的集合) 需要引入 scala.collection.mutable.ArrayBuffer Append增加元素 ![](https://i-blog.csdnimg.cn/direct/46fe4c011b23460da121c22e66cb204a.png) 转换:arr.toBuffer(不可变转可变),arr.toArray(可变转不可变) ![](https://i-blog.csdnimg.cn/direct/376589eab69541e39121d1d85a46ed41.png)

相关推荐
CV缝合救星39 分钟前
【Arxiv 2025 预发行论文】重磅突破!STAR-DSSA 模块横空出世:显著性+拓扑双重加持,小目标、大场景统统拿下!
人工智能·深度学习·计算机视觉·目标跟踪·即插即用模块
boonya2 小时前
Elasticsearch核心原理与面试总结
大数据·elasticsearch·面试
坐吃山猪2 小时前
SpringBoot01-配置文件
java·开发语言
晚风(●•σ )2 小时前
C++语言程序设计——06 字符串
开发语言·c++
TDengine (老段)3 小时前
TDengine 时间函数 WEEKDAY() 用户手册
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
我叫汪枫3 小时前
《Java餐厅的待客之道:BIO, NIO, AIO三种服务模式的进化》
java·开发语言·nio
Nicole-----3 小时前
Python - Union联合类型注解
开发语言·python
晚云与城3 小时前
今日分享:C++ -- list 容器
开发语言·c++
TDengine (老段)3 小时前
从 ETL 到 Agentic AI:工业数据管理变革与 TDengine IDMP 的治理之道
数据库·数据仓库·人工智能·物联网·时序数据库·etl·tdengine
yaoxtao3 小时前
java.nio.file.InvalidPathException异常
java·linux·ubuntu