抽象类
定义:使用 abstract 关键字定义抽象类,包含抽象属性和抽象方法。
抽象属性:未初始化的属性即为抽象属性,使用 val 或 var 定义。
抽象方法:声明但未实现的方法,使用 def 定义。
继承与重写
继承:子类必须实现父类的抽象属性和方法,否则子类也需声明为抽象类。
重写:非抽象方法重写需使用 override 关键字,抽象方法重写可省略 override。
匿名子类
定义:通过重写代码块的形式创建匿名子类,无需全新类名。
单例对象与特质
单例对象
定义:使用 object 关键字声明,模拟静态对象的行为。
语法:object ClassName { ... },所有属性和方法可通过类名直接调用。
特质
定义:使用 trait 关键字定义,类似于接口,但可包含具体实现。
继承与混入:类通过 extends 继承特质,多个特质通过 with 连接。
特质的叠加与冲突解决
特质叠加
定义:一个类可以混入多个特质,扩展类的功能。
冲突解决:当多个特质有相同方法时,类中重写该方法解决冲突。
特质与抽象类的区别
扩展性:特质可扩展多个,抽象类只能扩展一个。
构造函数:抽象类可定义带参数的构造函数,特质不行。
抽象类与特质的实现
示例代码:
class User(val name: String, val age: Int)
trait Dao {
def insert(user: User) = {
println("insert into database :" + user.name)
}
}
trait APP {
_: Dao =>
def login(user: User): Unit = {
println("login :" +
user.name) insert(user)
}
}
object MyApp extends APP with Dao {
def main(args: Array[String]): Unit = {
login(new User("bobo", 11))
}
}
操作细节:包括属性的定义、方法的实现、重写关键字的使用等。
特质的动态混入 包括特质的叠加顺序和冲突解决方法。
使用type关键字定义新的数据类型别名,简化代码书写。
集合的分类,包括序列、集和映射,并强调了它们的可变与不可变版本的区别。
不可变集合与可变集合的继承关系,以及数组的定义、定义方法、赋值、遍历和增加元素的操作。
类型检查和类型转换
类型判断:
使用isInstanceOf判断对象是否为某类型实例。
示例:判断对象是否为person类型。
类型转换:
- obj.isInstanceOf[T]:判断 obj 是不是T 类型。
- obj.asInstanceOf[T]:将 obj 强转成 T 类型。
使用asInstanceOf进行类型转换。
示例:将对象转换为布尔类型并输出当前类型。
获取类信息:
class Person{
}
object Person {
def main(args: Array[String]): Unit = {
val person = new Person
//(1)判断对象是否为某个类型的实例
val bool: Boolean = person.isInstanceOf[Person]
if ( bool ) {
//(2)将对象转换为某个类型的实例
val p1: Person = person.asInstanceOf[Person]
println(p1)
}
//(3)获取类的信息
val pClass: Class[Person] = classOf[Person]
println(pClass)
}
}
使用classOf获取对象的类名并输出。
枚举类和应用类
枚举类:
object Test {
def main(args: Array[String]): Unit = {
println(Color.RED)
}
}
// 枚举类
object Color extends Enumeration {
val RED = Value(1, "red")
val YELLOW = Value(2, "yellow")
val BLUE = Value(3, "blue")
}
枚举类需要继承特定的父类。
示例:定义颜色枚举并输出其值。
应用类:
// 应用类
object Test20 extends App {
println("xxxxxxxxxxx"
);
}
应用类需要继承APP类。
示例:定义一个简单的应用类并调用其方法。
类型定义
新类型定义:
使用type关键字定义新类型别名。
示例:将string类型重命名为S。
集合简介
集合分类:
1.Scala 的集合有三大类:序列 Seq、集Set、映射 Map,所有的集合都扩展自 Iterable
特质。
2.对于几乎所有的集合类,Scala 都同时提供了可变和不可变的版本,分别位于以下两个包
不可变集合:scala.collection.immutable 可变集合: scala.collection.mutable
3.Scala 不可变集合,就是指该集合对象不可修改,每次修改就会返回一个新对象, 而不会对原对象进行修改。类似于 java 中的 String 对象
4.可变集合,就是这个集合可以直接对原对象进行修改,而不会返回新的对象。类似于 java 中 StringBuilder 对象
集合主要分为序列(SEQ)、集(Set)和映射(Map)。
不可变集合和可变集合:
不可变集合:每次修改返回新对象,原对象不变。
可变集合:直接修改原对象。
不可变集合的继承
主要集合类型:
Set、Map、List等。
List在Scala中归属为SEQ。
可变集合的继承
简要介绍:
重点放在后续讲解部分。
数组
定义方式:使用VAL关键字。
定义方式:使用VAR关键字和ArrayBuffer。
增加元素:append和insert方法。
修改元素:通过索引修改数组元素。
遍历数组:使用for循环遍历数组。
定义并遍历可变数组,输出其长度。
演示增加和修改数组元素的操作。