Skip to content

Commit 6ae39f2

Browse files
committed
补充equals 值类型 多特制
1 parent 33a6c47 commit 6ae39f2

1 file changed

Lines changed: 40 additions & 1 deletion

File tree

src/cn/edu/jxnu/scala/basic/scalaBasic.md

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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
325339
object Test5 extends App {
@@ -516,10 +530,11 @@ class Construction3(val var1: String, val var2: String) {
516530
class 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

Comments
 (0)