Skip to content

Commit 40a3e15

Browse files
committed
新增重写,重载,隐式转换
1 parent 8cd7ab3 commit 40a3e15

2 files changed

Lines changed: 20 additions & 0 deletions

File tree

src/cn/edu/jxnu/scala/basic/FunctionObjects.scala

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,27 @@ object TestRantional extends App {
6363
println(n * 3) // 输出2*3/2*3 //这里不需要隐式转换等同 n.*(3)
6464
implicit def intToRational(x: Int) = new Rantional(x)
6565

66+
//可以定义隐式类,作为类型的转换
6667
println(3 * n) // 上面定义了隐式转换,不报错,否则3.*(n) 会提示3是Int没有*方法
6768
println(3.*(n)) //等同new Rantional(3,1)*Rantional(2,2)
6869

70+
/**
71+
* 隐式类
72+
* 在scala2.10后提供了隐式类,可以使用implicit声明类,但是需要注意以下几点:
73+
* 1.其所带的构造参数有且只能有一个
74+
* 2.隐式类必须被定义在类,伴生对象和包对象里
75+
* 3.隐式类不能是case class(case class在定义会自动生成伴生对象与2矛盾)
76+
* 4.作用域内不能有与之相同名称的标示符
77+
*
78+
* 转换前提
79+
* 1.不存在二义性(如例1)
80+
* 2.隐式操作不能嵌套使用,即一次编译只隐式转换一次(One-at-a-time Rule)
81+
* Scala不会把 x + y 转换成 convert1(convert2(x)) + y
82+
* 3.代码能够在不使用隐式转换的前提下能编译通过,就不会进行隐式转换。
83+
*
84+
* @param name
85+
*/
86+
implicit class implicitClass(val name: String) //隐式类必须用要有一个有一个参的主构造方法
87+
6988

7089
}

src/cn/edu/jxnu/scala/basic/ObjectsAndClasses.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ class Construction4 @SerialVersionUID(1L)(override val var1: String, override va
9595
//初始化可以省略new
9696
//因为默认自带equals、toString等。可以使用==比较,也可以使用println直接打印内容
9797
//match模式匹配时用的比较多
98+
//默认生成自己的伴生对象
9899
case class Construction5(name: String, pws: String = "pass")
99100

100101
object TestcaseClass extends App {

0 commit comments

Comments
 (0)