包和对象有什么区别?
答案 0 :(得分:10)
包不是运行时实体,对象是。每当需要存储代码或数据的东西时,你应该使用包来组织代码的层次结构和对象(假设普通的类和实例当然不是更好)。
答案 1 :(得分:4)
向Daniel's answer添加一点:
类(第5.3节)和对象(第5.4节)都是根据模板定义的。
模板定义特征或类对象或单个对象的类型签名,行为和初始状态。它可以有:
- 本地修饰符('
abstract
','final
','sealed
','implicit
','lazy
')- 访问已修改('
private
'|'protected
'),- 访问限定符('
this
')对象定义定义符合模板t的新类(或:模块)的单个对象。
它大致相当于以下三个定义,它们在一起 定义一个类并根据需要创建该类的单个对象:
final class m$cls extends t
private var m$instance = null
final def m = {
if (m$instance == null) m$instance = new m$cls
m$instance
}
对象可以隔离其他类实例的公共代码。具体用法:
Scala中的类没有静态成员;但是,伴随物体的定义可以达到同等效果 通常,类的伴随模块是对象,它与类具有相同的名称,并在同一范围和编译单元中定义。
相反,该类称为模块的伴侣类。
包是编译单元的一部分。
编译单元由一系列包装,导入子句和类组成 和对象定义,可以在package子句之前。
包是一个特殊的对象,它定义了一组成员类,对象和 包。
与其他对象不同,包不能用作值。拥有与模块或类相同的完全限定名称的包是非法的 假设包装外的顶级定义被注入特殊的 空包装。该包无法命名,因此无法导入。
特殊预定义名称
_root_
指的是最外面的根包 包含所有顶级包。
所以: