密封类:
1,使用 sealed 修饰的类或者特质,不能在类定义文件之外定义它的子类
2,可以避免滥用继承
3,用在模式匹配之中,可以让编译器在编译阶段进行检查,确保当前匹配的完整性
package day01
sealed abstract class Furniture
//定义两个样例类
case class Couch() extends Furniture
case class Chair() extends Furniture
object seale{
// 方法体为 模式匹配
def findPlaceToSit(furniture: Furniture):String =furniture match {
case a:Couch => "line on couch"
case b: Chair => "line on Chair"
}
val chair = Chair()
def main(args: Array[String]): Unit = {
println(findPlaceToSit(chair))
}}
Scala中样例类是一中特殊的类,可用于模式匹配。case class是多例的,后面要跟构造参数,case object是单例的
package day01
object case_ {
def main(args: Array[String]): Unit = {
//定义样例类
// 默认带有 applay 方法,不需要 new进行 创建对象(调用 applay方法)
// 构造函数默认的是 public val 进行修饰的(可更改var,不推荐)
case class Message( sender: String,recipient:String,body:String)
// case object是单例的
case object CheckTimeOutTask
// 类中有参和无参,当类有参数的时候,用case class ,当类没有参数的时候那么用case object。
val che = CheckTimeOutTask
println(che) //CheckTimeOutTask
// 创建样例类
val message = Message("xiaoming","Tom","hello")
println(message.body) //hello
// case class Message(var sender: String,recipient:String,body:String)
// message.sender="Jerry"
val message1 = Message("xiaoming","Tom","hello")
// 样例类的比较是基于值或者结构的比较,而不是基于引用的比较
if(message==message1) println("same")
else println("different") //same
//样例类的copy是 浅copy
val message3 = message.copy()
println(message3.sender+":"+message3.recipient+":"+message3.body)//xiaoming:Tom:hello
if(message==message3)println("true") else println("false") //true
//样例类不完全 copy ,部分赋值
val message4 =message.copy("Tont")
println(message4.sender+":"+message4.recipient+":"+message4.body)//Tont:Tom:hello
}
}