Scala中将包的提升到了很高的地位,而Java中比较简单
1.包的引入
1)Scala中,import包可以出现在任何地方,并不限于文件顶部,import语句的范围是从引入开始,一直延申到包含该语句的块末尾。可以在需要时引用,缩小import包的作用范围,提高效率
2) _ 下划线表示将包中所有内容引入,等价于 *
3)如果不想要包中全部的类,而只是包中一部分的类,可以采用选择器{}
4)如果引入的多个包中有相同的类,可以将不需要的类进行重命名进行区分
5)若某个冲突的类根本不会用到,那么这个类可以直接隐藏掉
6)Scala中,自动引入的包有:
lang
scala
Predef
2. 打包方式
package com.ah{
package scala{
calss Person{
......
}
}
}
这样可以在一个文件中同时创建多个包,以及给各个包创建类
注:路径*idea project\scalatest2\target\classes\com*
3.import
子包可以直接调用父包的类,但父包调用子包的类需要使用import
import 不需要一定在开头写, 在代码中写也可以
5. 包可以包含类,对象和特质,但不能包含函数/方法/变量。这是java虚拟机的局限,为弥补这一点不足,Scala提供了包对象的概念来解决这个问题
1)不能在包中直接写方法和定义变量
2)每一个包都可以有一个包对象,需要在父包中定义
3)包对象的名字需要和子包的名字一样
4)在包对象中定义的变量和方法,可以在对应的包中使用
5)在底层,包对象会生成两个类,一个是package.class 和 package$.class
6.可见性
Java包的可见性
7.伴生类 伴生对象
先介绍伴生类和伴生对象
一个文件中,class 和 object 的名字相同时,如class Clerk,object Clerk同时出现。
称class Clerk 为伴生类,object Clerk为伴生对象
在伴生类中写入非静态内容
在伴生对象中写入静态内容
Scala包的可见性
1)当属性访问权限为默认时,从底层看属性是 private 的,但是提供了xxx_$eq(),xxx()方法,从效果上看是任何地方都可以访问
2)方法访问权限为默认,从底层看是 public 的
(注意,属性默认是private,方法默认是public)
3)private 为私有权限,只在类的内部和伴生对象中可用
4)protected 为受保护权限,Scala中比Java更严格,只能子类访问,同包无法访问
5)Scala中没有public 关键字,不能用public 显示的修饰属性和方法(前面的public是从Java角度看的)
6)包访问权限
见下面的例子,因为Person中name属性是private的,所以在Visit中无法访问
加上包访问权限后便可以访问:
注:Scala中包名和源码所在的文件目录结构可以不一致,但是编译后的字节码文件路径和包名会保持一致(工作由编译器完成)
关于韩顺平老师Scala的笔记