1. 第一题
代码:
package com {
class P1 {
def description = "This is package com."
}
package horstmann {
class P2 {
def description = "This is package horstmann."
}
package impatient {
class Test1 {
//子包里的类可以使用父包里的类
val p1 = new P1
println(p1.description)
val p2 = new P2
println(p2.description)
}
}
}
}
package com.horstmann.impatient {
class Test2 {
//父包里的类对子类不可见
val p1 = new P1 //访问不到P1
val p2 = new P2 //访问不到P2
}
}
2. 第二题
略
3. 第三题
代码:
package object random {
val a = BigDecimal(1664525)
val b = BigDecimal(1013904223)
val n = 32
var seed: Int = _
def nextInt(): Int = {
val temp = (seed * a + b) % BigDecimal(scala.math.pow(2, n))
seed = temp.toInt
seed
}
def nextDouble(): Double = {
val temp = (seed * a + b) % BigDecimal(scala.math.pow(2, n))
seed = temp.toInt
seed.toDouble
}
def setSeed(seed: Int): Unit = {
this.seed = seed
}
}
4. 第四题
书上说是java虚拟机的局限性
5. 第五题
方法在com包中可见。
如果com包为本包,那么仅在本包可见。
如果com包为父包,那么可见度从本包延伸到com包。
6. 第六题
代码:
import java.util.{HashMap => JavaHashMap}
import scala.collection.mutable.HashMap
def copy(map: JavaHashMap[String, Int]): HashMap[String, Int] = {
var temp = HashMap[String, Int]()
for (k <- map.keySet().toArray) {
temp += (k.toString -> map.get(k))
}
temp
}
测试代码:
val map = new JavaHashMap[String, Int]
map.put("John", 1)
map.put("Alice", 2)
map.put("Bob", 3)
val newMap = copy(map)
for ((k, v) <- newMap) println(s"$k -> $v")
7. 第七题
略
8. 第八题
如上图所示,包java和包javax下依然是包,没有类,所以引用无效。
9. 第九题
代码:
import java.lang.System._
val userName = getProperty("user.name")
def login(pwd: String): Unit = {
if ("secret" == pwd) out.print("Hello, " + userName) else err.println("Wrong password for " + userName)
}
login(scala.io.StdIn.readLine())
10. 第十题
略