Scala-Unit6-final/type关键字、样例类&样例对象
一、关键字
1.final关键字
用final修饰的类:不能被继承
用final修饰的方法:不能被重写
注意:(1)在Scala中变量不需要用final修饰,因为val与var已经限制了变量是否可变
(2)final不能修饰特质,但是可以修饰抽象类
trait Animal {
def eat(name:String)
final def sleep(name:String):Unit ={
println(s"$name ->睡得天花乱坠")
}
}

如图代码,Pig继承特质Animal后使用“ctrl + o”快捷键想重写sleep方法,但是没有显示。
2.type关键字:别名设置
命令行操作:type S = String //用S代替String
val name:S = "dilireba"
trait Anl {
type T
def sleep(str:T):Unit={
println(str)
}
}
object AnlTest extends Anl {
override type T = String
def main(args: Array[String]): Unit = {
AnlTest.sleep("很香")
}
}
如上代码:AnlTest继承Anl特质,重写Type T为String类型。
type可以让我们的程序变得更灵活!
二、样例对象&样例类
1.样例类:case class,它是特殊的类,可以用于模式匹配。
写法:case class 类名(属性)
当一个类被声明为样例类时,Scala编译器会自动为我们做一下工作:
(1)样例类的构造器中的参数默认为val类型,也可以声明为var,但不推荐;
(2)为样例类自动创建伴生对象,并且在其中实现apply方法,使我们使用时不用new直接使用;
(3)在伴生对象中实现unapply方法,用于模式比配。
case class Boy(high:Int,weight:Int)
case class Girl(high:Int,weight:Int) object TestSex extends App {
def objMatch(obj:Any) = obj match{
case Boy(x,y) => println(s"boy $x high $y weight")
case Girl(x,y) => println(s"gril $x high $y weight ")
} objMatch(Boy(180,150))
objMatch(Girl(165,95))
}
2.样例对象:不能封装数据,支持模式匹配
写法:case object 类名(属性)
case object Check
match{
case "Check" => println(Check)
}
Scala-Unit6-final/type关键字、样例类&样例对象的更多相关文章
- Scala模式匹配和样例类
Scala有一个十分强大的模式匹配机制,可以应用到很多场合:如switch语句.类型检查等.并且Scala还提供了样例类,对模式匹配进行了优化,可以快速进行匹配. 1.字符匹配 def mai ...
- iOS中编写单例类的心得
单例 1.认识过的单例类有哪些: NSUserDefaults.NSNotificationCenter.NSFileManager.UIApplication 2.单例类 单例类某个类在代码编写时使 ...
- 【Scala篇】--Scala中Trait、模式匹配、样例类、Actor模型
一.前述 Scala Trait(特征) 相当于 Java 的接口,实际上它比接口还功能强大. 模式匹配机制相当于java中的switch-case. 使用了case关键字的类定义就是样例类(case ...
- 学好Spark/Kafka必须要掌握的Scala技术点(二)类、单例/伴生对象、继承和trait,模式匹配、样例类(case class)
3. 类.对象.继承和trait 3.1 类 3.1.1 类的定义 Scala中,可以在类中定义类.以在函数中定义函数.可以在类中定义object:可以在函数中定义类,类成员的缺省访问级别是:publ ...
- Scala学习十四——模式匹配和样例类
一.本章要点 match表达式是更好的switch,不会有意外调入下一个分支 如果没有模式能够匹配,会抛出MatchError,可以用case _模式避免 模式可以包含一个随意定义的条件,称做守卫 你 ...
- Scala集合库、模式匹配和样例类
package com.yz8 import org.junit.Test class test { @Test def test: Unit = { val ints = List(1,5,7,6, ...
- Scala基础:模式匹配和样例类
模式匹配 package com.zy.scala import scala.util.Random /** * 模式匹配 */ object CaseDemo { def main(args: Ar ...
- 大数据学习day16------第三阶段-----scala04--------1. 模式匹配和样例类 2 Akka通信框架
1. 模式匹配和样例类 Scala有一个十分强大的模式匹配机制,可以应用到很多场合:如switch语句.类型检查等.并且Scala还提供了样例类,对模式匹配进行了优化,可以快速进行匹配 1.1 模式匹 ...
- Scala--模式匹配和样例类
模式匹配应用场景:switch语句,类型查询,析构,样例类 一.更好的switch val ch :Char = '+' val sign = ch match{ case '+' => 1 c ...
随机推荐
- Java中关于string的些许问题及解析
问题一:String 和 StringBuffer 的区别JAVA 平台提供了两个类: String 和 StringBuf fer ,它们可以储存和操作字符串,即包含多个字符的字符数据.这个 Str ...
- -Dmaven.multiModuleProjectDirectory system property is not set.
1.配置 maven 环境变量 新建系统变量 -> 变量名(N): M2_HOME 变量值(V): D:\apache-maven-3.5.4(改为自己的maven目录) -> 添加 pa ...
- Confluence 6 任务的类型
下面是有关你可以调整的计划任务列表. Confluence 备份(Back Up Confluence) 对 Confluence 站点执行备份操作. 每集群(Per cluster) At 2am ...
- Confluence 6 安装一个语言组件
Confluence 捆绑了一系列的语言包.这些语言包在 'Language Configuration' 界面中的语言选项中.在 Confluence 的管理员控制台,你可以选择 Choosing ...
- Confluence 6 修改默认空间标识图片
空间标识图片在边栏上的站点目录(Sites Directory)中作为图标进行显示.默认的空间标识图片将会应用到所有的空间中,如果你没有自定义的空间标识被定义的话,请查看 Configure the ...
- cordova AndroidStudio3.0 升级报错问题
http://blog.csdn.net/z_Xiaozuo/article/details/78962701 ionic3 打包 安卓项目遇到的问题,当时比较冲忙升级了下android studio ...
- Python基础之多态与多态性
切记:不要将多态与多态性这二者混为一谈,只要分开,就会很明朗了. 一.多态 多态指的是一类事物有多种形态,(一个抽象类有多个子类,因而多态的概念依赖于继承). 比如:动物分为人类.狗类.猪类(在定义角 ...
- hdu4990 转移矩阵
找了半天错发现m有可能是1.. /* 如果n是奇数,就进行(n/2)次转移,然后取F[2],反之取F[1] */ #include<bits/stdc++.h> using namespa ...
- 俺也会刷机啦--windows7下刷android
刷机很多人都会,本文只为像我这种入门的朋友而写的. 风险提示: 1. SD卡数据极可能会丢失(我这次就全丢了). 2. 升级失败. (俺的)环境说明: windows7 专业版64位 cmd命令行工具 ...
- PaperNotes Instance-Level Salient Object Segmentation
title: PaperNotes Instance-Level Salient Object Segmentation comments: true date: 2017-12-20 13:53:1 ...