Scala教程(七)package实战
2015-09-22 16:58
411 查看
Scala教程(七)package实战
--以上为package实战的内容,谢谢大家对我的关注。
——厚积薄发(yuanxw)
1 包package
1.1 引用包
Scala的代码采用了Java平台的完整的包机制,可以通过把package子句放在文件顶端的方式把整个文件内容放进包里。指定了package全文档的作用域// 全文档的作用域 package com.scala.base
1.2 定义包
// 定义包 package hadoop {}
1.3 嵌套包
// 定义包 package hadoop { package navigation { // 在hadoop.navigation包中 class Navigator } package launch { class Booster{ /* * 不用写 var nav = new hadoop.navigation.Navigator(); * 不用写 var nav = new com.scala.base.hadoop.navigation.Navigator(); */ val nav = new navigation.Navigator } } }
1.4 链式结构包
// 包的链接形式结构 package sprak.navigation { // 定义抽象类 abstract class Navigator{ // 定义抽象方法 def act; } // Scala包是可以嵌套的 package tests{ // 在sprak.navigation.tests包中 class NavigatorSuite } // 实现包 package impls { // Navigator类所在的包com.scala.base.sprak.navigation.Navigator class Action extends Navigator{ def act = { println("===Action==="); } } } }
1.5 包对象
包对象可以包含类、对象和特征,但是不能包含函数的定义。// 包的链接形式结构 package sprak.navigation { // 定义抽象类 abstract class Navigator{ // 定义抽象方法 def act; } // Scala包是可以嵌套的 package tests{ // 在sprak.navigation.tests包中 class NavigatorSuite } // 实现包 package impls { // Navigator类所在的包com.scala.base.sprak.navigation.Navigator class Action extends Navigator{ def act = { println("===Action==="); } } } }
1.6 隐式引用的包
Scala隐式地添加了一些引用到每个程序中。本质上,就好象下列的三个引用子句已经被加载了每个以“.scala”为扩展名的源文件的顶端:/* * Scala隐式引用的包 * _下划线表示所有的东西,和Java中*作用一样。 */ import java.lang._ // java.lang包的所有的东西 import scala._ // scala包下所有的东西 import Predef._ // Predef对象所有的东西
1.7 包的访问修饰符
package可以用访问修饰符private和protected做标记。这些修饰符把对成员的访问限制在代码确定的作用域中。package com.scala.base package spark package navigation { // 只允许[packageName] <= 可访问 private[spark] class Navigator { /* protected[navigation] * Navigator类可用 * Navigator子类可用 * 当前com.scala.base.spark.navigation包可访问 */ protected[navigation] def useStarChart(){} class LegOfJourney { // 对内部的成员都是可见的 private[Navigator] val distance = 100; } // 被private[this]标记的定义仅能在包含了定义的同一个对象中被访问。 // 这种定义被称为对象私有:object-private。 private[this] var speed = 200; } } package launch { // 引用navigation包下所有的属性及方法 import navigation._ object Vehicle { // com.scala.base.spark.launch包中所有的作用域都可以访问 guide属性 private[launch] val guide = new Navigator; } }
没有修饰符 | 公开访问 |
private[spark] | 在外部包中访问 |
private[navigation] | 与Java的包可见度相同 |
private[Navigator] | 与Java的private相同 |
private[LegOfJourney] | 与Scala的private相同 |
private[this] | 仅在同一个对象中可以访问 |
1.8 可见度和伴生对象
Java里,静态成员和实例成员属于同一个类,因此访问修饰符可以统一地应用在他们之上。你已经知道在Scala里没有静态成员;代之以可以拥有包含成员的仅存在一个的伴生对象。// 伴生类 // 伴生类和伴生对象可以时访问 class PackageOps_Advanced{ import PackageOps_Advanced.power private def canMakeItTrue = power > 10001 } // 伴生对象 // 伴生类和伴生对象可以时访问 object PackageOps_Advanced { private def power = 10000; def makeItTrue(p:PackageOps_Advanced):Boolean = { // 调用伴生类canMakeItTrue的方法 var result = p.canMakeItTrue; return result; } }
--以上为package实战的内容,谢谢大家对我的关注。
——厚积薄发(yuanxw)
相关文章推荐
- 查询时间转换成短格式
- ZSDR017-客户订货价格和库存
- 斐波那契数列
- https证书申请
- tomcat脚本启停
- 我的电脑环境配置
- 第四周项目三(3)
- C语言结构体小结
- Mybatis-插入语句返回ID主键
- 黑马程序员——Java语言基础:常量、变量、运算符
- Java 图片处理——如何生成高清晰度而占有磁盘小的缩略图
- js如何终止程序
- ActiveMQ入门实例
- 这是啥-Cython语言简单介绍
- c++primer第三章习题(1)
- 第四周-项目3 - 单链表应用(3)判断递增
- c语言怎么获取数组的长度
- C++小插曲--strncmp函数
- 1.mina服务初体验-->.<简单的搭建个mina
- 定时删除liunx上的日志(利用find、crontab命令)