scala 密封类与样例类
密封类:
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 } }