包
一.常见的命名形式
com.公司名.项目名.业务模块名
二.自动引入的常用包
java.lang.* scala包 Predef包
三.三种打包方式

四.通过import导包的情况
在Java中两个类只要package不同就需要import。
在Scala中需要手动导包的情况
①两个类的package不存在包含关系且不是一个package名
②两个类的包存在包含关系,且父包要访问子包的内容
五.包对象
①包对象出现的原因
包可以包含类、对象和特质trait,但不能包含函数/方法或变量的定义。这是Java虚拟机的局限。为了弥补这一点不足,scala提供了包对象的概念来解决这个问题
②定义形式
package object Test{ //对象名与包名一致 } package Test{ }
包对象和我们常见的object一样在编译时生成两个class文件(package$.class和package.class --->所以每个包最多只可以有一个包对象),其他scala文件如果使用包对象的变量和方法,就像同包下两个class文件之间相互访问
六.包的可见性
①在Java中
| public | 所有都可以访问 | 
| protected | 对子类和同一个包中的类公开 | 
| 默认 | 同一个包的类公开 | 
| private | 只有类本身可以访问,不对外公开 | 
不同包的两个类A与B,A中的属性age使用protected修饰,在B中一定不能访问的到吗?
不一定如果B是A的子类,可以访问的到
②在Scala中
1.当属性访问权限为默认时,从底层看属性是private的,但是因为提供了xxx_$eq()[类似setter]/xxx()[类似getter] 方法,因此从使用效果看是任何地方都可以访问)
2.当方法访问权限为默认时,默认为public访问权限
3.private为私有权限,只在类的内部和伴生对象中可用
class Clerk { var name : String = "jack" private var sal : Double = 9999.9 def showInfo(): Unit = { println(" name " + name + " sal= " + sal) }} object Clerk{ def test(c : Clerk): Unit = { //这里体现出在伴生对象中,可以访问c.sal println("test() name=" + c.name + " sal= " + c.sal) }}
4.protected为受保护权限,scala中受保护权限比Java中更严格,只能子类访问,同包无法访问(编译器层面控制的)
5.在scala中没有public关键字,即不能用public显式的修饰属性和方法。
6.包访问权限(表示属性有了限制。同时包也有了限制),这点和Java不一样,体现出Scala包使用的灵活性
package com.scq.scala class Person { private[scala] val pname="hello" // 增加包访问权限后,1.private同时起作用。不仅同类可以使用 2. 同时com.atguigu.scala中包下其他类也可以使用 } 当然,也可以将可见度延展到上层包 private[scq] val description="zhangsan" 说明:protected也可以变化,比如protected[scq], 非常的灵活。
画了个图:
七.包的引入
Scala引入包也是使用import, 基本的原理和机制和Java一样,但是Scala中的import功能更加强大,也更灵活
①在Scala中,import语句可以出现在任何地方,并不仅限于文件顶部,import语句的作用一直延伸到包含该语句的块末尾。这种语法的好处是:在需要时在引入包,缩小import 包的作用范围,提高效率
②Java中如果想要导入包中所有的类,可以通过通配符*,Scala中采用下 _ 
③如果不想要某个包中全部的类,而是其中的几个类,可以采用选取器(大括号)
④如果引入的多个包中含有相同的类,那么可以将不需要的类进行重命名进行区分,这个就是重命名
import java.util.{ HashMap=>JavaHashMap, List} //引入Java的HashMap和List,并且重命名HashMap为JavaHashMap
⑤如果某个冲突的类根本就不会用到,那么这个类可以直接隐藏掉
import java.util.{ HashMap=>_, _} // 含义为 引入java.util包的所有类,但是忽略 HahsMap类. var map = new HashMap() // 我用的idea工具,提示java.util的HashMap,并且不提示scala的HashMap的全类名,需要手动导入,感觉是软件的问题 new ArrayList[Int]()


 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号