@@ -320,6 +320,20 @@ object Test4 extends App {
320320 if (str3 equals str4) println(" equals比较内容" ) // 输出
321321
322322}
323+ object HashEquals extends App {
324+
325+ val intVal = new Integer (1 )
326+ val longVal = new lang.Long (2 ) // 不加包名的话,默认导入scala.Long
327+
328+ println(intVal == longVal) // 输出true,Scala中==等同于equals
329+
330+ println(intVal.## ) // scala hashcode
331+ println(longVal.## )
332+
333+
334+ println(intVal eq (longVal)) // false,比较引用的相等性,效果等同于Java的引用比较(Ref1==Ref2)
335+ println(intVal ne (longVal)) // true,引用不等
336+ }
323337```
324338``` scala
325339object Test5 extends App {
@@ -516,10 +530,11 @@ class Construction3(val var1: String, val var2: String) {
516530class Construction4 @ SerialVersionUID (1L )(override val var1 : String , override val var2 : String ) extends Construction3 (
517531 var1, var1) {
518532
533+ // Trait的线性化细节描述Scala编程P238
519534 // 1.java的super是静态绑定的
520535 // 在java(单一继承)里面,假设有一个对象a,它既是类型X,又是类型Y,那么X和Y必定具有“父子关系”,也就是说,其中一个是另一个的父类。
521536 // 因为java的继承是单一继承,不管实际类型是什么,一个对象的“继承链”,从super所在类开始往左的层分,都是在编译时期就可以确定下来的。
522- // 2.scala的super是动态绑定的
537+ // 2.scala的super是动态绑定的(类中还是静态绑定的)
523538 // 在scala(多重继承)里面,假设有一个对象a,它既是trait X,又是trait Y, X和Y可能具有父子关系,也可能是共享同一个祖先的“兄弟”,反正,它们的关系不再限定在“父子”上。
524539 // 因为scala允许多重继承,父亲类和trait们的优先顺序,是由对象的实际类型的线性化结果决定的,所以需要动态绑定。
525540 // 3.调用方法,有三种情况,如下
@@ -537,6 +552,16 @@ class Construction4 @SerialVersionUID(1L)(override val var1: String, override va
537552
538553}
539554
555+ // 仅是演示,混入多个特质
556+ class Trait extends Serializable with Comparable [String ] with Iterable [String ] {
557+
558+ // 特质的特点:与Java8的接口很像,但功能更强大
559+ // 特质可以声明字段并保持状态,特质可以做任何在类中能做的事,除了两种情况
560+ // 1.无类参数(主构造函数是无参的)
561+ // 2.特质中super是动态绑定的,类中是静态绑定的
562+
563+ }
564+
540565// 样例类的主构造必须得有参数
541566// 初始化可以省略new
542567// 因为默认自带equals、toString等。可以使用==比较,也可以使用println直接打印内容
@@ -1133,4 +1158,18 @@ object SingletonObject {
11331158 }
11341159}
11351160```
1161+ ``` scala
1162+ /**
1163+ * 定义自己的值类型
1164+ *
1165+ * @author 梦境迷离
1166+ * @time 2019-01-23
1167+ */
1168+ class Dollars (val amount : Int ) extends AnyVal {
1169+
1170+ override def toString : String = " $" + amount
11361171
1172+ }
1173+ // 有多个字符串类型的参数,在传参的顺序不正确的时候编译器不会给出提示,如果使用值类型,编译器会给出编译错误
1174+ ```
1175+ //END
0 commit comments